#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
メインメソッドは、アプリケーションの終了後にプール上でreleaseを呼び出します。これは、プール内のすべてのオブジェクトにreleaseを送信します。しかし、アプリケーション内で作成された自動リリースされたオブジェクトは、アプリケーションが終了するまで、実行ループの途中で固執しないので、プールは排水されるか解放されます(iPhoneのコンテキストでは、この時点で修正されました!)。しかし、これが起こったときに誰かが確かに知っていますか?ランロップの終わりにプールが流出し、次のプールの始めに新しいプールが割り当てられるのは理にかなっているようですが、これに関する決定的な情報はありません。アップルのフォーラムにはHere's a discussionがありますが、それは非常に投機的です(最終的には議論の余地はありません)。 ドキュメントやソースコード(あるいは実験的なプログラム)からの証拠があれば誰でも私に答えられますか?Cocoa-touchの主なオートリリースプールはいつ排水されますか?
参照する特定のプールは、アプリケーションの最後まで排水されませんが、実行ループを呼び出すたびに、アプリケーションの実行ループにネストされた独自のプールが作成されます。 – cobbal
これは意味があります。だから、自分のプールを決して作成しないと、あるアプリケーションはデフォルトで2つのネストされたプールを持っていますか? – jakev
Yup;実行ループ内の外側プールおよびサイクリングプールを含む。 UIApplicationMain()は実装の詳細としてプールを作成/排除する可能性があります。 – bbum