I read in the apple documentation about copyWithZone : "The returned object is implicitly retained by the sender, who is responsible for releasing it". But... How may I release something I return... I'm going crazy !
Sample of code :
- (id)copyWithZone:(NSZone *)zone {
MyObject* obj = [[[self class] allocWithZone:zone] init]; // explicit retain
[obj fillTheObj];
return obj; // implicit retain
}
Where should be the told release ? I retain twice ? Uhhh...
The sender is responsible for releasing. That means whoever calls your copy method takes ownership, i.e.:
MyObject *obj = ...
MyObject *aCopy = [obj copy];
... do stuff with aCopy
[aCopy release];