copyWithZone возвращает значение владения и сохраняет количество
Я прочитал в яблочной документации о copyWithZone:
"Возвращенный объект неявно сохраняется отправителем, который отвечает за его освобождение".
Так что, если я напишу это:
- (id)copyWithZone:(NSZone *)zone {
MyObject* obj = [[[[self class] allocWithZone:zone] init] autorelease];
[obj fillTheObj];
return obj;
}
и я звоню:
MyStuff* obj = [varobj copy];
будут obj
быть сохранены? А как насчет сохранения, если я не установил авто-релиз?
1 ответ
Не делайте этого автоматически в своем copyWithZone
метод или вы не будете владеть им (и, вероятно, не сможете даже ничего с этим сделать).
Удалить авто-релиз и obj
будут надлежащим образом сохранены в MyStuff
копирование. Вам просто нужно release
это когда вы закончите с этим.
В предложении Apple говорится, что отправитель - это ваш MyStuff *obj
инициализация - имеет право собственности и должна освободить его. "Отправитель" относится к объекту, который отправил copy
сообщение, а не ваше copyWithZone
метод.