Domanda

A volte mi chiedo quando qualcosa viene autoreleased. Ho aggiunto un NSLog nel dealloc di vari oggetti, ma non ho trovato nulla di utile.

Quando si fa qualcosa di rilascio quando autorelease viene utilizzato? E 'imprevedibile, o c'è qualche thread in esecuzione in più? Grazie.

È stato utile?

Soluzione

Quando il "pool autorelease scade".

Ciò significa in genere, è quando la pila è svolto.

Quindi, pensare in questo modo - la vostra applicazione è event driven. Si arriva eventi inviati ad esso - e vengono elaborati tramite una serie di funzioni. Quando ciascuna delle funzioni ritorna, e l'evento è fatto in fase di elaborazione, sarà chiamato autorelease.

Questo significa che si può contare su un oggetto per essere ancora vivo quando si autorelease, e ritorno da una funzione ad esso del chiamante. Non bisogna mai aspettatevi di essere in giro durante l'elaborazione di qualsiasi tipo di evento successivo, o quando ha chiamato fuori stack frame si esistente.

Altri suggerimenti

Dalla documentazione iOS

Ogni thread in un'applicazione Cocoa mantiene la propria pila di oggetti NSAutoreleasePool. Quando un thread termina, rilascia automaticamente tutte le piscine autorelease associati con se stesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top