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