Ich lese in der Apple-Dokumentation über copyWithZone: "Das zurückgegebene Objekt wird implizit vom Absender behalten, der für die Freigabe verantwortlich ist". Aber ... Wie kann ich etwas freigeben, das ich zurückgebe ... Ich werde verrückt!iPhone: copyWithZone: Freigabe eines Objekts vor seiner Rückkehr?
Probe Code:
- (id)copyWithZone:(NSZone *)zone {
MyObject* obj = [[[self class] allocWithZone:zone] init]; // explicit retain
[obj fillTheObj];
return obj; // implicit retain
}
Wo soll das gesagt Release sein? Ich behalte zweimal? Uhhh ...
Okkkk, der Absender des Aufrufs, nicht der Absender des Objekts. Das ist klarer. Aber ich werde wirklich verrückt. Also ... Ich kann myObject.var = [localvar copy] mit einer Eigenschaft in myObject übergeben, die als retain definiert ist und im dealloc freigegeben wird. Das würde gut funktionieren, oder? – Oliver
@Oliver - Sie werden über-behalten, wenn Sie das getan haben. Wenn die 'var' -Eigenschaft als' retain' deklariert ist, wäre die korrekte Zuweisung 'myObject.var = [[localvar-Kopie] Autorelease]'. Aber es klingt wie das, was Sie wirklich wollen, ist, die Eigenschaft als 'copy' zu deklarieren, dann können Sie einfach' myObject.var = localvar'. –