使用BOOL属性

时间:2011-02-01 15:11:15

标签: objective-c ios properties

Apple建议以这种方式声明BOOL属性:

@property (nonatomic, assign, getter=isWorking) BOOL working;

由于我使用的是Objective-C 2.0属性和点表示法,因此我使用self.working访问此属性。我知道我也可以使用[self isWorking] - 但我没有。

所以,因为我到处都使用点符号,为什么要定义一个额外的属性?简单地写

是否可以
@property (nonatomic, assign) BOOL working;

或者在我的案例中使用getter=isWorking是否有任何好处(点符号的使用)?

谢谢!

3 个答案:

答案 0 :(得分:197)

Apple只是建议为风格目的声明isX getter。无论您是否自定义getter名称都无关紧要,只要您使用带有正确名称的点表示法或消息表示法即可。如果您要使用点符号,则没有区别,您仍然可以通过属性名称访问它:

@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

答案 1 :(得分:3)

Apple推荐用于样式目的。如果您编写此代码:

@property (nonatomic,assign) BOOL working;

然后你不能使用[object isWorking] 它会显示错误。但如果你使用下面的代码意味着

@property (assign,getter=isWorking) BOOL working;

所以你可以使用[object isWorking]。

答案 2 :(得分:-26)

使用具有基本类型的属性没有任何好处。 @propertyNSObjectsNSString*NSNumber*等堆分配UIButton*一起使用,因为内存管理访问器是免费创建的。创建BOOL时,该值始终在堆栈上分配,并且不需要任何特殊访问器来防止内存泄漏。 isWorking只是表达布尔值状态的流行方式。

在另一种面向对象语言中,您可以为变量private bool working;和两个访问者创建:SetWorking用于setter,IsWorking用于访问者。