1

私はおそらくこれを考えすぎています。

// Inside some method...
NSThread *thread = [[NSThread alloc] initWithTarget:functionWrapper selector:@selector(run) object:nil];
[thread start];

この後の呼び出し[thread release]: A. メモリ リークを回避し、必要である、または... B. 問題が発生します。

この質問に対する答えは、実行が終了したときにスレッドが自分自身を解放することを示唆していますが、その動作はどこに文書化されていますか?

4

2 に答える 2

5

はい、autorelease または release のいずれかを使用して、しばらくしてからリリースする必要があります。

ただし、そもそも自分のスレッドを初期化する必要はありません。objective-c には、新しいスレッドを自分で割り当てずにスレッド化を実装する方法がたくさんあります。

[self performSelectorInBackground:@selector(yourMethod) withObject:nil];

タスクをキューに入れることができる NSOperations もあります。

于 2012-07-17T01:13:21.803 に答える
2

原則として、オブジェクトに対して alloc、new、または copy を呼び出す場合は、それを解放する必要があります。

そのスレッドのライフサイクルが完了したら (または dealloc 関数で)、 を呼び出します[thread release]

リンク先の回答との違いは、文字列の最後に自動解放があったことがわかります (自動解放は、上記のルールが適用されないインスタンスです。その場合、オブジェクトは文字列の最後で自動的に解放されます)。現在のメイン実行ループ全体で有効になるようにします)。

于 2012-07-17T01:08:59.060 に答える