Не смотрите на счет удержания. Они бесполезны и могут ввести вас в заблуждение - вы не можете быть уверены, что ничто другое не удерживает объект, что объект, который вы откуда-то получаете, не является общим.
Вместо этого сконцентрируйтесь на владении объектом и следуйте правилам управления памятью какао к букве. Таким образом, ваше управление памятью будет правильным, независимо от того, какие оптимизации может сделать Cocoa за кулисами для вас. (Например, реализация -copy
как просто -retain
для неизменяемых объектов.)
Кроме того, важно понять разницу между свойствами ваших объектов и переменными экземпляра в ваших объектах. В коде вашего вопроса вы присваиваете значение переменной экземпляра. Эта переменная экземпляра - это просто переменная. Присвоение ему будет вести себя как любое другое присвоение переменной. Чтобы использовать свойство, вы должны использовать либо точечный синтаксис, либо синтаксис в скобках, чтобы фактически вызвать метод установки свойства:
self.value = newValue; // this is exactly equivalent to the next line
[self setValue:newValue]; // this is exactly equivalent to the previous line
Код, сгенерированный для синтаксиса точки и синтаксиса скобок, идентичен, и ни один из них не получит прямой доступ к переменной экземпляра.