iPhone: copyWithZone: освободить объект перед его возвращением?

Я прочитал в документации Apple о copyWithZone: "Возвращенный объект неявно сохраняется у отправителя, который отвечает за его освобождение". Но... Как я могу выпустить что-то, что я возвращаю... Я схожу с ума!

Пример кода:

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

        return obj; // implicit retain
    }

Где должен быть упомянутый релиз? Я удерживаю дважды? Уххх...

1 ответ

Решение

Отправитель несет ответственность за освобождение. Это означает, что тот, кто вызывает ваш метод копирования, становится владельцем, то есть:

MyObject *obj = ...
MyObject *aCopy = [obj copy];
... do stuff with aCopy
[aCopy release];
Другие вопросы по тегам