Using a BOOL property
Objective CIosPropertiesObjective C Problem Overview
Apple recommends to declare a BOOL property this way:
@property (nonatomic, assign, getter=isWorking) BOOL working;
As I'm using Objective-C 2.0 properties and dot notation, I access this property using self.working
. I know that I could also use [self isWorking]
— but I don't have to.
So, as I'm using dot notation everywhere, why should I define an extra property? Would it be okay to simply write
@property (nonatomic, assign) BOOL working;
Or do I have any benefits writing getter=isWorking
in my case (usage of dot notation)?
Thanks!
Objective C Solutions
Solution 1 - Objective C
Apple simply recommends declaring an isX
getter for stylistic purposes. It doesn't matter whether you customize the getter name or not, as long as you use the dot notation or message notation with the correct name. If you're going to use the dot notation it makes no difference, you still access it by the property name:
@property (nonatomic, assign) BOOL working;
[self setWorking:YES]; // Or self.working = YES;
BOOL working = [self working]; // Or = self.working;
Or
@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
Solution 2 - Objective C
Apple recommends for stylistic purposes.If you write this code:
@property (nonatomic,assign) BOOL working;
Then you can not use [object isWorking].
It will show an error. But if you use below code means
@property (assign,getter=isWorking) BOOL working;
So you can use [object isWorking] .
Solution 3 - Objective C
There's no benefit to using properties with primitive types. @property
is used with heap allocated NSObjects
like NSString*
, NSNumber*
, UIButton*
, and etc, because memory managed accessors are created for free. When you create a BOOL
, the value is always allocated on the stack and does not require any special accessors to prevent memory leakage. isWorking
is simply the popular way of expressing the state of a boolean value.
In another OO language you would make a variable private bool working;
and two accessors: SetWorking
for the setter and IsWorking
for the accessor.