Использование свойства 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 для аксессора.