usted tiene que entender el concepto de una carrera de circuito. El ciclo de ejecución en iOS espera a que suceda algún evento y luego actúa sobre él. Ese evento podría ser que el usuario toque la pantalla, se recibe una llamada, etc.
Para cada uno de esos eventos que el IOS se encarga, una piscina autorelease nueva se crea al principio y al drenado cuando el procesamiento de eventos se ha completado. En teoría, podría haber cualquier cantidad de pools de autorelease anidados creados por Cocoa Touch, pero el principal que debe conocer es el bucle de eventos.
Quizás este diagrama del Application Life Cycle ayude.
.
En pseudo-código, esto se reduce a,
int UIApplicationMain(...) {
while (!shouldQuitApplication) {
Event *someEvent = // wait for next event;
NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];
// handle event
[myPool release];
}
}
Estos son los tipos de eventos en iOS
UIEventTypeTouches,
UIEventTypeMotion,
UIEventTypeRemoteControl,
Así que después de cada toque, movimiento, o evento de control remoto se procesa, la la piscina será drenada
A menos que y hasta que no estoy creando una piscina AutoRelease específico para mi código, no es que lo hará sólo una piscina en la pila a nivel de aplicación? Si estoy creando mis propios grupos de autorrelease personalizados, entonces esto es comprensible. ¿RunLoop también creó múltiples pools de liberación automática por sí mismo? – Abhinav
Bueno. Si desea saber más acerca de runloops, se puede leer aquí: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1 Acerca de su pregunta ... No hay forma de saber cuántos grupos de autorreleases estarán allí en la pila. Si ejecuta su código desde runloop, no desde un hilo personalizado, hay al menos uno. Debes crear tus propios grupos cuando ejecutas el código a partir de un hilo personalizado. – bealex