Cocoa / Obj-Cの初心者である私は、AaronHillegassによる「CocoaProgrammingfor Mac OS X」の本を読んでいますが、GCを使用してこのような理由をすべて回避する機会もあるという事実は別として、私はそうではありません。確かに私はそれらの保持のいくつかの理由を理解しています。
特に、例の1つでは、アーロンは優れたプログラミング手法として次のように示しています。
- (void) setFoo:(NSCalendarDate *)x
{
[x retain];
[foo release];
foo = x;
}
メソッドの最初の行にxインスタンスを保持する理由がわかりません。
[x retain];
このインスタンスのスコープは、setメソッドだけですよね?メソッドスコープを終了するとき、xインスタンスはとにかく割り当てを解除する必要がありますか?さらに、次の方法でxをfooに割り当てる場合:
foo = x;
fooはとにかくx個のメモリセルを指しているので、ポイントされたオブジェクトの保持カウントをインクリメントします。これにより、メモリの割り当てが解除されないようにする必要があります。
それで、ポイントは何ですか?もちろん、何かが足りないと思いますが、正確にはわかりません。
ありがとう、ファブリツィオ