2

Objective-C で引数を指定してメソッドを呼び出し、引数のあとがきを解放するとします。

id argumentI = [Object new]; 
[ classA method1: argumentI ];
[ argumentI release ];

行が線形に処理されるため、 method1 が終了した後に引数が解放されることがわかります。しかし、バックグラウンドスレッドでメソッドを呼び出すと:

[ NSThread detachNewThreadSelector:@selector(method1) toTarget:self withObject:argumentI ];
[ argumentI release ];

そして、バックグラウンド ジョブが何かの引数を使用している間、メイン スレッドはオブジェクトを解放します (メソッドが呼び出される前に、retainCount が 1 になることが受け入れられます)。ゾンビの使用 (既に割り当てが解除されているオブジェクトの使用) のために、エラーが発生する可能性はありますか?

質問は:

メソッド呼び出しは、引数であるオブジェクトに対して保持されますか? または、上記の問題のような場合、メソッドの先頭で保持を呼び出す必要がありますか?

4

1 に答える 1

2

ドキュメントからdetachNewThreadSelector:toTarget:withObject:

オブジェクトaTargetとanArgumentは、切り離されたスレッドの実行中に保持され、その後解放されます。

于 2011-05-12T13:44:06.607 に答える