UIがハングしないように、バックグラウンドで長時間実行される作業を行うためにいくつかのスレッドを切り離すiPhoneアプリケーションを構築しています。スレッドには、メモリ管理のために NSAutoreleasePool インスタンスが必要であることを理解しています。よくわからないのは、スレッド化されたメソッドが別のメソッドを呼び出すかどうかです-そのメソッドにも NSAutoreleasePool が必要ですか?
コード例:
- (void)primaryMethod {
[self performSelectorInBackground:@selector(threadedMethod) withObject:nil];
}
- (void)threadedMethod {
NSAutoreleasePool *aPool = [[NSAutoreleasePool alloc] init];
// Some code here
[self anotherMethod];
// Maybe more code here
[aPool drain];
}
- (void)anotherMethod {
// More code here
}
私が尋ねる理由は、オブジェクトがプールを配置せずに自動解放され、「ちょうどリークしている」というエラーを受け取っているからです。
自動解放プールがまったく設置されていないという他の質問を見たことがありますが、なぜ自動解放プールが必要なのかを理解しています。threadedMethod
で作成された自動解放プール (この例では)が で作成されたオブジェクトに適用されるかどうかを調べることに特に関心がありますanotherMethod
。