Objective-C で引数を指定してメソッドを呼び出し、引数のあとがきを解放するとします。
id argumentI = [Object new];
[ classA method1: argumentI ];
[ argumentI release ];
行が線形に処理されるため、 method1 が終了した後に引数が解放されることがわかります。しかし、バックグラウンドスレッドでメソッドを呼び出すと:
[ NSThread detachNewThreadSelector:@selector(method1) toTarget:self withObject:argumentI ];
[ argumentI release ];
そして、バックグラウンド ジョブが何かの引数を使用している間、メイン スレッドはオブジェクトを解放します (メソッドが呼び出される前に、retainCount が 1 になることが受け入れられます)。ゾンビの使用 (既に割り当てが解除されているオブジェクトの使用) のために、エラーが発生する可能性はありますか?
質問は:
メソッド呼び出しは、引数であるオブジェクトに対して保持されますか? または、上記の問題のような場合、メソッドの先頭で保持を呼び出す必要がありますか?