copyWithZone возвращает значение владения и сохраняет количество - PullRequest
1 голос
/ 08 января 2011

Я прочитал в яблочной документации о copyWithZone:

"Возвращенный объект неявно сохраняется у отправителя, который отвечает за его освобождение".

Итакесли я напишу это:

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

        return obj;
    }

и позвоню:

MyStuff* obj = [varobj copy];

Будет ли obj сохранен?А как насчет сохранения, если я не установил авто-релиз?

1 Ответ

3 голосов
/ 08 января 2011

Не выпускайте его автоматически с помощью вашего copyWithZone метода, иначе вы не будете его владельцем (и, скорее всего, не сможете с ним ничего сделать).

Удалите авто-выпуск, и obj будет сохранен при копировании MyStuff. Вам просто нужно release, когда вы закончите.

В предложении Apple говорится, что отправитель - ваша инициализация MyStuff *obj - владеет и должен освободить его. «Отправитель» относится к объекту, который отправил сообщение copy, а не к вашему copyWithZone методу.

...