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 метод.

Другие вопросы по тегам