È necessario comprendere il concetto di un ciclo di esecuzione. Il ciclo di esecuzione in iOS attende alcuni eventi e quindi agisce su di esso. Questo evento potrebbe essere l'utente che tocca lo schermo, ricevere una chiamata, ecc.
Per ogni evento di questo genere gestito da iOS, un nuovo pool è creato all'inizio e scaricato quando l'elaborazione dell'evento è completa. In teoria, ci potrebbe essere un numero qualsiasi di pool di autorelease nidificati creati da Cocoa Touch, ma quello principale che dovresti conoscere è il ciclo degli eventi.
Forse questo schema da Application Life Cycle sarà di aiuto.
.
In pseudo-codice, questo si riduce a,
int UIApplicationMain(...) {
while (!shouldQuitApplication) {
Event *someEvent = // wait for next event;
NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];
// handle event
[myPool release];
}
}
Questi sono i tipi di eventi in iOS
UIEventTypeTouches,
UIEventTypeMotion,
UIEventTypeRemoteControl,
Così, dopo ogni tocco, movimento o evento telecomando viene elaborato, la la piscina sarà prosciugata.
A meno che e fino a quando non sto creando un pool AutoRelease specifico per il mio codice, non è che ci sarà un solo pool nello stack a livello di applicazione? Se non riesco a creare i miei pool di autorelease personalizzati, allora è comprensibile. RunLoop ha anche creato più pool di autorelease autonomamente? – Abhinav
Bene. Se vuoi saperne di più su runloop, puoi leggere qui: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1 Informazioni sulla domanda ... Non è possibile sapere quanti pool di autorelease saranno presenti nello stack. Se si esegue il codice da runloop, non da un thread personalizzato, ce n'è almeno uno. È necessario creare i propri pool quando si esegue il codice da un thread personalizzato. – bealex