Разница между сохранением и копированием? - PullRequest
4 голосов
/ 28 января 2011

Какая разница между сохранением и копированием? Какое значение имеет подсчет ссылок?

Я знаю, что когда объект выделяется с использованием alloc / retain, счетчик ссылок увеличивается на единицу. так как насчет использования копирования?

Другой вопрос, связанный с этим, заключается в разнице между использованием
@property (неатомный, сохранить) и @property (неатомный, скопировать)?

Ответы [ 3 ]

10 голосов
/ 28 января 2011

retain - делается на созданном объекте, просто увеличивается счетчик ссылок.

copy - создать новый объект

3 голосов
/ 16 марта 2012

Отвечая на ваш вопрос, насколько мне известно.Во-первых, в чем разница между сохранением и копированием?каково его значение при подсчете ссылок?

retain - «Указывает, что retain должна вызываться для объекта при назначении. ... Предыдущее значение отправляется сообщением об освобождении».Таким образом, вы можете себе представить назначение экземпляра NSString (который является объектом и который вы, вероятно, хотите сохранить).Таким образом, счетчик хранения увеличивается на 1.

copy - «Указывает, что копия объекта должна использоваться для присвоения. ... Предыдущему значению отправляется сообщение об освобождении».В основном то же, что и сохранить, но отправка -копировать, а не-сохранить.если я правильно помню, счетчик тоже увеличится на 1.

хорошо, теперь перейдем к более подробным сведениям.

Атрибуты свойств - это специальные ключевые слова, чтобы сообщить компилятору, как генерировать методы получения и установки.Здесь вы указываете два атрибута свойства: nonatomic, который говорит компилятору не беспокоиться о многопоточности, и retain, который говорит компилятору сохранять переданную переменную перед установкой переменной экземпляра.

В других ситуациях выможет потребоваться использовать атрибут свойства assign для сохранения, что говорит компилятору НЕ!сохранить переданную переменную.Или, возможно, атрибут свойства «copy», который делает копию переданной переменной перед установкой.

Надеюсь, это поможет.Я нашел здесь еще один пост, который тоже может вам помочь.

Цель C - Назначить, скопировать, сохранить

Приветствия!Хосе

2 голосов
/ 07 мая 2013

Вообще говоря, copy создает новый объект, который имеет то же значение, что и исходный объект, и устанавливает счетчик ссылок нового созданного объекта на 1 (Кстати, счетчик ссылок оригинальный объект не затронут).

Однако copy эквивалентно retain для неизменяемого объекта, который ПРОСТО увеличивает счетчик ссылок исходного объекта на 1.

...