バックグラウンドプロセスを起動するために使用したいセレクターを次のように呼び出しています
[self performSelectorInBackground:@selector(startSync) withObject:nil];
たとえば、startSync が次のようになっているとします。
-(void)startSync {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// expensive background process
Sync *sync = [Sync new];
[sync performSync];
[sync release];
[pool release];
}
同期オブジェクトの「performSync」では、非常に集中的な処理が行われています。XML を取得し、配列に解析して、MySQL データベースに挿入します。プロセス自体は正常に動作しているようで、Analyzer はリークを示していませんが、プロファイラーを使用して実行前にベースライン ヒープ マークを実行し、実行後に再度実行すると、約 5 MB の増加が見られます。私たちの知る限り (しゃれは意図していません)、私たちは performSync プロセスでオブジェクトを適切に割り当てて解放しています。
問題は、このプロセスをバックグラウンドで実行していることです。AutoreleasePool を作成し、バックグラウンド プロセスの最後にそれを解放している場合、バックグラウンド プロセスが終了したときにバックグラウンド プロセスに関連するすべてを解放すべきではありませんか? 割り当てられたすべてのオブジェクトが破棄されない理由がよくわかりません。