You must understand the concept of a startup cycle. A run in iOS waits for an event to happen, and then it acts on it. This event can be a user touching the screen, receiving a call, etc.
For each such event that iOS processes, a new autostart pool is created at the beginning and is reset when event processing is complete. Theoretically, there could be any number of nested autorun pools created using Cocoa Touch, but the main one you should know is the event loop.
Perhaps this diagram from the application life cycle will help.
.
In pseudo code, it comes down to
int UIApplicationMain(...) { while (!shouldQuitApplication) { Event *someEvent = // wait for next event; NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init]; // handle event [myPool release]; } }
These are the types of events in iOS.
UIEventTypeTouches, UIEventTypeMotion, UIEventTypeRemoteControl,
So, after processing each touch, movement or remote control event, the pool will be drained.
source share