2013-03-09 10 views
6

Sto imparando Objectiv C, e sento il termine "vivere nel mucchio" costantemente, da quello che capisco è una specie di area sconosciuta in cui un puntatore abita, ma cerca di mettere davvero alla prova il termine esatto .. .come "dovremmo rendere la nostra proprietà strong in modo che non viva nell'heap. Ha detto che dal momento che la proprietà è privata, so che è una grande differenza, è chiaro che vogliamo essere sicuri di voler contare il riferimento a questo oggetto in modo che l'autorelease non lo pulisca (vogliamo "trattenerlo" da quello che so finora), ma voglio essere sicuro di aver capito il termine dato che viene usato molto spesso.Cosa significa "live in the heap"?

Apprezzalo

+0

anca o cumulo ???? – Shashank

+0

@Shashank scusa se l'ho modificato, mio ​​male (non è la mia prima lingua:/anche se non è una scusa) – JohnBigs

+1

"dovremmo rendere forte la nostra proprietà in modo che non vivrà nell'heap" non ha senso. Sarebbe utile se ci indicassi l'uso effettivo. –

risposta

14

Ci sono tre principali aree di memoria utilizzate da C (e da exte nsion, Objective C) programmi per la memorizzazione dei dati:

  • L'area statica
  • La zona automatico (nota anche come "stack"), e
  • L'area dinamica (noto anche come "mucchio ").

Quando si assegnano gli oggetti con l'invio di un loro classe new o alloc messaggio, l'oggetto che ne risulta è allocato nella zona di stoccaggio dinamico, così l'oggetto è detto di vivere nel mucchio. Tutti gli oggetti Objective-C sono così (anche se i puntatori che si riferiscono a questi oggetti possono trovarsi in una delle tre aree di dati di memoria). Al contrario, le variabili locali primitive e gli array "vivono" nello stack, mentre le variabili primitive globali e gli array vivono nell'archivio dei dati statici.

solo gli oggetti mucchio di riferimento sono contati, anche se è possibile allocare la memoria dal mucchio utilizzando malloc/calloc/realloc, nel qual caso l'assegnazione non sarebbe di riferimento-contati: il codice avrebbe il compito di decidere quando free il allocata memoria dinamica.