あなたが触れられないと言うときmain()
、あなたはいつ電話しますUIApplicationMain()
か? main()
Mac では自動解放プールを作成する必要がないため、これは iOS であると想定しています。呼び出すUIApplicationMain()
場所は、最上位の自動解放プールが必要な場所です。
自動解放プールはイベント ループごとに自動的に作成されるため、通常は作成する必要はありません。私の最初の実験ではmain()
、iPad から削除しても、少なくともリークは発生しませんでした。にブレークポイントを設定することで確認できます__NSAutoreleaseNoPool()
。唯一の問題は、イベント ループの前に呼び出されるメソッドです。アプリケーションデリゲートがプログラムで生成さ-init
れた場合、イベントループの前に呼び出される可能性があると思います。しかし、アプリデリゲートで自動解放されたオブジェクトを作成して+initialize
も、リークは発生しませんでした。
自動解放プールが必要な場所がある場合 ( get__NSAutoreleaseNoPool()
が呼び出され、「オブジェクトがプールなしで自動解放されました -- ただリークしている」などのメッセージが表示される場合)、そのメソッドでプールを作成するだけで済みます。
- (id)someMethod {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
....
id result = ....
[pool drain];
return result;
}
しかし、メインの実行ループを開始する方法についてはまだ少し迷っていますが、自動解放プールを作成することはできません。