Я прочитал в документации Apple о copyWithZone: «Возвращенный объект неявно сохраняется отправителем, который несет ответственность за его освобождение». Но ... Как я могу отпустить то, что я верну ... Я схожу с ума!iPhone: copyWithZone: освобождение объекта перед его возвратом?
Пример кода:
- (id)copyWithZone:(NSZone *)zone {
MyObject* obj = [[[self class] allocWithZone:zone] init]; // explicit retain
[obj fillTheObj];
return obj; // implicit retain
}
Где должен быть сказал релиз? Я сохраняю дважды? Uhhh ...
Okkkk, отправитель вызова, а не отправитель объекта. Это более понятно. Но я действительно схожу с ума. Итак ... я могу передать myObject.var = [localvar copy] с свойством в myObject, определенным как сохранение, и выпущен в dealloc. Это будет хорошо, не так ли? – Oliver
@Oliver - вы будете слишком осторожны, если вы это сделаете. Если свойство 'var' объявлено как' keep', то правильным присваиванием будет 'myObject.var = [[localvar copy] autorelease]'. Но похоже, что вы действительно хотите объявить свойство как 'copy', тогда вы можете просто выполнить' myObject.var = localvar'. –