私が次のことをしたとしましょう (foo は何らかのオブジェクトとして始まります):
[foo release];
// STUFF with foo
[foo retain];
foo を再割り当てしない限り、これが終わっても同じ foo のままですよね? //STUFF 中に foo を失う危険はありませんか?
リリースに関する私の理解が正しいことを確認していると思います。foo を解放しても、すべてのハンドルがなくなるまで、実際には消えません。つまり、foo を //STUFF 内の他のオブジェクトに割り当てるか、または foo を //STUFF 内のスコープ外に移動する必要があります (おそらく新しい foo を作成する必要があります)。オブジェクトは削除されますよね?
動機のために編集:
これを行う理由は、次の switch ステートメントがあるとしましょう。
switch (test)
{
case 1:
foo = [A alloc];
[foo inita];
break;
case 2:
foo = [B alloc];
[foo initb];
break;
case 3:
[foo setupc];
break;
case 4:
f = [D alloc];
[foo initd];
break;
}
スイッチの前に foo を解放し、最後に保持することは理にかなっています。ケース3を除いて。したがって、私が提案したことを安全に行うことができれば、コードがより簡単になるかもしれないと考えていました。
もちろん、各 alloc/init の周りに release/retain のペアを置くこともできますが、それは多くの複製されたコードです...
[foo autorelease] とその後の保持でうまくいくかもしれません。