Я обычно вижу, что этот вопрос задан другим способом, например Должен ли каждый ivar быть свойством? (и мне нравится bbum ответ на этот вопрос Q).
Я использую свойства почти исключительно в своем коде. Однако так часто я работаю с подрядчиком, который долгое время развивается на iOS и является традиционным игровым программистом. Он пишет код, который почти не обладает свойствами и опирается на иваров. Я предполагаю, что он делает это, потому что 1.) он использовал это, поскольку свойства не всегда существовали до Objective C 2.0 (октябрь '07) и 2.) для минимального прироста производительности, не проходящего через геттер/сеттер.
Пока он пишет код, который не течет, я бы предпочел, чтобы он использовал свойства над ivars. Мы говорили об этом, и он более или менее не видит смысла использовать свойства, так как мы не использовали KVO, и он испытывал проблемы с памятью.
Мой вопрос больше... Почему вы когда-нибудь захотите использовать период ivar - опытный или нет. Действительно ли велика разница в производительности, что использование ivar будет оправдано?
Также как точка разъяснения, я переопределяю сеттеры и геттеры по мере необходимости и использую ivar, который коррелирует с этим свойством внутри геттера/сеттера. Однако за пределами getter/setter или init я всегда использую синтаксис self.myProperty
.
Изменить 1
Я ценю все хорошие ответы. Тот, который я хотел бы адресовать, кажется неправильным, заключается в том, что с ivar вы получаете инкапсуляцию, где с собственностью вы этого не делаете. Просто определите свойство в продолжении класса. Это скроет собственность от посторонних. Вы также можете объявить свойство readonly в интерфейсе и переопределить его как readwrite в реализации, например:
// readonly for outsiders
@property (nonatomic, copy, readonly) NSString * name;
и имеют в продолжении класса:
// readwrite within this file
@property (nonatomic, copy) NSString * name;
Чтобы он полностью "private" объявлял его только в продолжении класса.