Использование свойства BOOL
Apple рекомендует объявить свойство BOOL следующим образом:
@property (nonatomic, assign, getter=isWorking) BOOL working;
Поскольку я использую Objective-C 2.0 свойства и точечную нотацию, я обращаюсь к этому свойству с помощью self.working
. Я знаю, что я мог бы также использовать [self isWorking]
, но мне не нужно.
Итак, поскольку везде я использую точечную нотацию, почему я должен определить дополнительное свойство? Было бы хорошо просто написать
@property (nonatomic, assign) BOOL working;
Или у меня есть какие-либо преимущества в написании getter=isWorking
в моем случае (использование точечной нотации)?
Спасибо!
Ответы
Ответ 1
Apple просто рекомендует объявить геттер isX
для стилистических целей. Неважно, настраиваете ли вы имя получателя или нет, если вы используете точечную нотацию или нотацию сообщения с правильным именем. Если вы собираетесь использовать точечную нотацию, это не имеет значения, вы все равно получаете к ней доступ по имени свойства:
@property (nonatomic, assign) BOOL working;
[self setWorking:YES]; // Or self.working = YES;
BOOL working = [self working]; // Or = self.working;
или
@property (nonatomic, assign, getter=isWorking) BOOL working;
[self setWorking:YES]; // Or self.working = YES;, same as above
BOOL working = [self isWorking]; // Or = self.working;, also same as above
Ответ 2
Apple рекомендует стилистические цели. Если вы напишете этот код:
@property (nonatomic,assign) BOOL working;
Тогда вы не можете использовать [object isWorking].
Он покажет ошибку. Но если вы используете ниже код означает
@property (assign,getter=isWorking) BOOL working;
Итак, вы можете использовать [object isWorking].
Ответ 3
Нет смысла использовать свойства с примитивными типами. @property
используется с выделенной кучей NSObjects
как NSString*
, NSNumber*
, UIButton*
и т.д., потому что управляемые доступом к памяти создаются бесплатно. Когда вы создаете BOOL
, значение всегда выделяется в стеке и не требует каких-либо специальных аксессуаров для предотвращения утечки памяти. isWorking
- просто популярный способ выражения состояния логического значения.
В другом языке OO вы должны сделать переменную private bool working;
и два аксессора: SetWorking
для установщика и isWorking
для аксессора.