iPhone : copyWithZone : releasing an object before its return?

458 Views Asked by At

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...

1

There are 1 best solutions below

2
On BEST ANSWER

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];