Ответ 1
С точки зрения управления памятью, используя ivar = ...
или self.property = ...
(обратите внимание: нет такой вещи, как self.ivar
) одинаковы. Однако использование ivar = ...
не вызывает установщик, а self.property = ...
делает. Это имеет 3 важных разветвления, в определенном порядке:
- Если свойство не отмечено
nonatomic
, тогда доступ к базовому ivar не займет блокировки, и вы будете нарушать последствия атомарности. - Если свойство переопределено либо вами, либо подклассом, переопределенный установщик не будет вызываться.
- Уведомления KVO не будут отправляться.
Что касается только объявления ivar, он имеет ту же семантику управления памятью, что и объявление локальной переменной. Это описано в разделе раздела 4.4 документа Objective-C Automatic Reference Counting, но в основном, если это объект, он будет выведен как __strong
.