2011-01-08 15 views
0

copyWithZoneについてのAppleの文書を読みました:「返されたオブジェクトは、送信者がそれを解放する責任を負いません」。 しかし...私は戻ってくるものをどのようにリリースすることができます...私は夢中になる!コードのiPhone:copyWithZone:返される前にオブジェクトを解放しますか?

サンプル:語ったリリースである必要があり

- (id)copyWithZone:(NSZone *)zone { 
     MyObject* obj = [[[self class] allocWithZone:zone] init]; // explicit retain 
     [obj fillTheObj]; 

     return obj; // implicit retain 
    } 

? 私は2回保持されますか? Uhhh ...

答えて

1

送信者は、責任を負います。つまり、コピーメソッドを呼び出す人はすべて所有権を持ちます。すなわち、

MyObject *obj = ... 
MyObject *aCopy = [obj copy]; 
... do stuff with aCopy 
[aCopy release]; 
+0

Okkkk、オブジェクトの送信者ではなく、送信者です。それはもっと明らかです。しかし、私は本当に狂っている。だから... myObject.var = [localvar copy]を、retainとして定義されたmyObjectのプロパティで渡し、deallocで解放することができます。それはうまくいくでしょう? – Oliver

+0

@Oliver - あなたがそうしたら、あなたは過ぎ去ります。 'var'プロパティが' retain'として宣言されていれば、正しい割り当ては 'myObject.var = [[localvar copy] autorelease]'になります。しかし、あなたが本当に望むのは 'copy'としてプロパティを宣言することだと思えば、単に' myObject.var = localvar'を実行するだけです。 –

関連する問題