Разница между сохранением и копированием?

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

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

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


person binbash    schedule 28.01.2011    source источник
comment
Вы не приняли ни одного ответа. Вам следует выбрать один. :)   -  person Jiraheta    schedule 08.11.2013


Ответы (3)


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

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

person Girish Kolari    schedule 28.01.2011
comment
копировать также увеличить количество переобучений - person rithik; 22.03.2011
comment
@rithik: при создании нового объекта счетчик сохранения будет равен 1. - person Girish Kolari; 04.05.2011
comment
копия не всегда создает новый объект - person newacct; 21.09.2012

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

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

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

хорошо, теперь более подробно.

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

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

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

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

Ваше здоровье! Хосе

person Jiraheta    schedule 16.03.2012

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

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

person HoNooD    schedule 07.05.2013