Apple рекомендует объявить свойство BOOL следующим образом:
@property (nonatomic, assign, getter=isWorking) BOOL working;
Поскольку я использую свойства Objective-C 2.0 и точечную нотацию, я получаю доступ к этому свойству, используя self.working
. Я знаю, что тоже могу использовать [self isWorking]
- но мне не обязательно.
Итак, поскольку я везде использую точечную нотацию, зачем мне определять дополнительное свойство? Было бы хорошо просто написать
@property (nonatomic, assign) BOOL working;
Или у меня есть какие-то преимущества написания getter=isWorking
в моем случае (использование точечной записи)?
Спасибо!
objective-c
ios
properties
Патрик
источник
источник
Ответы:
Apple просто рекомендует объявить
isX
геттер в стилистических целях. Неважно, настраиваете ли вы имя получателя или нет, если вы используете точечную нотацию или нотацию сообщения с правильным именем. Если вы собираетесь использовать точечную нотацию, это не имеет значения, вы все равно получаете доступ к нему по имени свойства:Или
источник
isX
геттеры, но Xcode не может перечислить их во всплывающем окне автозаполнения. (В моем примере)working
там указано, ноisWorking
нет. Поэтому я не вижу никаких преимуществ в объявлении получателей BOOL. Мне нужно сделать больше, чтобы использовать их (объявить получатель), но я получаю меньше (без автозаполнения).Apple рекомендует в стилистических целях. Если вы напишете этот код:
Тогда вы не сможете использовать [object isWorking].
Это покажет ошибку. Но если вы используете код ниже, значит
Итак, вы можете использовать [object isWorking].
источник
Нет никакой пользы от использования свойств с примитивными типами.
@property
используются с кучей выделенной ,NSObjects
какNSString*
,NSNumber*
,UIButton*
, и т.д., потому что память удался аксессоры созданы бесплатно. Когда вы создаетеBOOL
, значение всегда выделяется в стеке и не требует специальных средств доступа для предотвращения утечки памяти.isWorking
- это просто популярный способ выражения состояния логического значения.В другом объектно-ориентированном языке вы должны создать переменную
private bool working;
и два средства доступа:SetWorking
для установщика иIsWorking
для средства доступа.источник
@property
в значительной степени предназначен для использования с примитивными типами и, только ради согласованности, имеет значительные преимущества. Кроме того, некоторые примитивные типы (64-разрядные типы на некоторых 32-разрядных процессорах и 128-разрядные типы на многих 32- и 64-разрядных процессорах) не являются атомарными при назначении;@property
атомарность тоже может быть выгодна в этих случаях.atomic
иnonatomic
атрибутов?