開発者向けドキュメントでは、次のように述べています。
アプリケーションまたはスレッドの寿命が長く、自動解放されたオブジェクトを大量に生成する可能性がある場合は、定期的に自動解放プールを排出して作成する必要があります (アプリケーション キットがメイン スレッドで行うように)。そうしないと、自動解放されたオブジェクトが蓄積され、メモリ フットプリントが大きくなります。ただし、切り離されたスレッドが Cocoa 呼び出しを行わない場合は、自動解放プールを作成する必要はありません。
これを行う最善の方法は何だろうと考えていました。うまくいくと思ういくつかの方法がありますが、どれが「最良」かわかりません。現在、スレッドを開始し、操作の実行を待機するメソッドがあります。
- (void)startThread
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
accessoryRunLoop = [NSRunLoop currentRunLoop];
//Add a dummy port to avoid exiting the thread due to no ports being found
[accessoryRunLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
while(accessoryThreadIsRunning)
{
//Keep the thread running until accessoryTheadIsRunning == NO
[accessoryRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
[pool release];
}
私が考えることができる私のオプションは次のとおりです。
1) while(accessoryThreadIsRunning) にカウンターを追加して、50 回または 100 回ごとに自動解放プールを空にし、新しいプールを作成します。
2) そのスレッドでメソッドを実行するたびに (performSelector: onThread: を使用)、自動解放プールを作成し、メソッドの最後でそれを解放できます。
3) プールが定期的に排出されてから作成されるようにタイマーを作成します。
オプション1が最適だと思いますが、これを行う別の方法があるかどうかを知りたいです。ありがとう!