私が理解するように、自動リリースされたオブジェクトは、自動リリースされたプールが解放されるときれいになります。これで、オートループプールは実行ループの最後に解放されます。実行ループの最後 - 自動解放プールの回復
私のクラスでカスタム自動解放プールを作成せず、そのクラスのいくつかのオブジェクトでautoreleaseメソッドを呼び出すのではない場合、それらのオブジェクトはいつ回復されますか? 「実行ループの終わり」は「アプリケーションの終了」を意味しますか?
私が理解するように、自動リリースされたオブジェクトは、自動リリースされたプールが解放されるときれいになります。これで、オートループプールは実行ループの最後に解放されます。実行ループの最後 - 自動解放プールの回復
私のクラスでカスタム自動解放プールを作成せず、そのクラスのいくつかのオブジェクトでautoreleaseメソッドを呼び出すのではない場合、それらのオブジェクトはいつ回復されますか? 「実行ループの終わり」は「アプリケーションの終了」を意味しますか?
実行ループの概念を理解する必要があります。 iOSの実行ループは、何らかのイベントが発生するのを待ってから、それを実行します。そのイベントは、ユーザーが画面に触れたり、電話を受けるなどの場合があります。
iOSが処理するすべてのイベントでは、新しい自動解放プールが最初に作成され、イベント処理が完了すると排水されます。理論的には、Cocoa Touchによって作成された入れ子になったオートレリープールがいくつでもありますが、あなたが知っておくべき主なものはイベントループです。
おそらく、Application Life Cycleのこの図が役に立ちます。
。
擬似コードで、これはつまるところ、
int UIApplicationMain(...) {
while (!shouldQuitApplication) {
Event *someEvent = // wait for next event;
NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];
// handle event
[myPool release];
}
}
これらは、だから、すべてのタッチ、モーション、またはリモコンの後にイベントが処理されるのiOS
UIEventTypeTouches,
UIEventTypeMotion,
UIEventTypeRemoteControl,
のイベントタイプですプールは排水される。
RunLoopに "circle"があるとしましょう:)すべての "circle"の始まりで、RunLoopはAutoreleaseプールを作成し、 "Circle"を終了する前に排水します。
実行ループの「終了」とは、アプリケーションの終了ではなく、実行ループの各反復の終了を意味します。
私のコード用に特定のAutoReleaseプールを作成していない限り、アプリケーションレベルでスタックにプールが1つしかありませんか?まったく自分のカスタムオートリリースプールを作成している場合、これは理解できます。 RunLoopは複数の自動解放プールも独自に作成しましたか? – Abhinav
。 runloopsについて詳しく知りたい場合は、こちらを参照してください:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1あなたの質問について...そこにオートリアーゼプールがいくつあるか知る方法はありません。カスタムスレッドからではなく、runloopからコードを実行する場合、少なくとも1つはあります。カスタムメイドスレッドからコードを実行するときは、独自のプールを作成する必要があります。 – bealex