iphonereleasereturnretaincopywithzone

iPhone : copyWithZone : releasing an object before its return?


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


Solution

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