Как official documentation состояний:
Есть три вида могущих быть удержанными типов указателей объекта:
- блока указатели (образованный путем применения вставки (^) описатель сигила к типу функции)
- Объектные указатели Objective-C (id, Class, NSFoo * и т. Д.)
- typedefs, отмеченные знаком ((NSObj ЭСТ))
Когда мы имеем дело с указателями объектов Objective-C (узоров битов, указывающих местоположение заостренный-объекта) и код выглядит так:
UIColor *color1 = [UIColor whiteColor];
// Increase reference count of color1 by 1, without copying it.
UIColor *color2 = color1;
во время назначения объекты не копируются, но их ссылки (с увеличением количества ссылок).
Что касается вашего случая, как указано в другом комментарии, это зависит от атрибутов свойства: атрибут copy
создает новый экземпляр объекта и увеличивает его количество ссылок, оставляя исходный объект незатронутым.
Кстати, вы можете проверить количество ссылок на свои объекты с помощью инструмента «Выделения». Проверьте, например, этот приятный answer, чтобы узнать, как вы можете управлять им.
Спасибо, так что если это свойство копии, это не увеличит количество ссылок customColor, но это приведет к увеличению количества ссылок вновь скопированному объект? – Honey
Вы можете легко проверить это, посмотрев адрес объекта. С неизменяемыми объектами, которые на самом деле представляют собой детали реализации, которые вам не нужны, потому что они могут работать в любом случае или меняться сейчас или позже. В вашем контракте просто говорится: «Дай мне что-то, что ведет себя как копия». – Eiko
@ asma22 - это зависит от того, как метод -copy реализован на приемнике. Для неизменяемого объекта, такого как NSNumber, он фактически просто увеличит количество удержаний. Но для чего-то вроде NSMutableArray, тогда да, будет создан и сохранен новый (неизменный) экземпляр NSArray. Я считаю, что UIColor является одним из тех непреложных классов, поэтому в этом конкретном случае он просто увеличит количество удержаний. Концептуально это еще один объект, но неизменяемые классы могут оптимизировать эту операцию, так как нет возможности изменить экземпляр. –