Musisz zrozumieć pojęcie pętli rozruchowej. Pętla uruchamiania w systemie iOS czeka na zdarzenie, które następnie działa. Zdarzeniem może być użytkownik dotykający ekranu, odbierający połączenie itp.
Dla każdego takiego zdarzenia, na którym działa iOS, na początku tworzona jest nowa pula autoreleaseów nowa i opróżniana po zakończeniu przetwarzania zdarzenia. Teoretycznie może istnieć dowolna liczba zagnieżdżonych pul autorelease utworzonych przez Cocoa Touch, ale najważniejszą rzeczą, o której powinieneś wiedzieć, jest pętla zdarzeń.
Może pomoże ten schemat z Application Life Cycle.
.
W pseudo-kodu, to sprowadza się do tego,
int UIApplicationMain(...) {
while (!shouldQuitApplication) {
Event *someEvent = // wait for next event;
NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];
// handle event
[myPool release];
}
}
Są to typy zdarzeń w iOS
UIEventTypeTouches,
UIEventTypeMotion,
UIEventTypeRemoteControl,
Więc po każdym dotyku, ruchu, lub zdarzenia zdalnego sterowania jest przetworzeniu basen zostanie osuszony.
Dopóki nie tworzę konkretnej puli AutoRelease dla mojego kodu, czy nie jest to tylko jedna pula w stosie na poziomie aplikacji? Jeśli w ogóle tworzę własne niestandardowe pule autorelease, to jest to zrozumiałe. Czy RunLoop również sam tworzył wiele puli autoreas- tów? – Abhinav
Dobrze. Jeśli chcesz dowiedzieć się więcej o runach, możesz przeczytać tutaj: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1 O twoim pytaniu ... Nie ma sposobu, aby dowiedzieć się, ile puli autoreas będzie w stosie. Jeśli wykonasz swój kod z runloopa, a nie z wątku niestandardowego, istnieje co najmniej jeden. Podczas wykonywania kodu z niestandardowego wątku musisz utworzyć własne pule. – bealex