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