Objective c 使用BOOL属性

Objective c 使用BOOL属性,objective-c,ios,properties,Objective C,Ios,Properties,Apple建议通过以下方式声明BOOL属性: @property (nonatomic, assign, getter=isWorking) BOOL working; 当我使用Objective-C2.0属性和点表示法时,我使用self.working访问此属性。我知道我也可以使用[self isWorking]——但我不必这么做 既然我到处都在使用点符号,为什么我要定义一个额外的属性呢?简单地写一下可以吗 @property (nonatomic, assign) BOOL working

Apple建议通过以下方式声明BOOL属性:

@property (nonatomic, assign, getter=isWorking) BOOL working;
当我使用Objective-C2.0属性和点表示法时,我使用
self.working
访问此属性。我知道我也可以使用
[self isWorking]
——但我不必这么做

既然我到处都在使用点符号,为什么我要定义一个额外的属性呢?简单地写一下可以吗

@property (nonatomic, assign) BOOL working;
在我的情况下(使用点符号),写
getter=isWorking
有什么好处吗


谢谢

Apple只是建议声明一个
isX
getter,以符合风格。不管您是否自定义getter名称,只要使用正确名称的点表示法或消息表示法即可。如果要使用点表示法,则没有区别,您仍然可以通过属性名称访问它:

@property (nonatomic, assign) BOOL working;

[self setWorking:YES];         // Or self.working = YES;
BOOL working = [self working]; // Or = self.working;


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


在另一种OO语言中,可以使变量
private bool工作和两个访问器:
SetWorking
用于设置器,而
IsWorking
用于访问器。

出于风格目的,苹果建议。如果您编写此代码:

@property (nonatomic,assign) BOOL working;
那么您就不能使用[对象正在工作]。
它将显示一个错误。但是如果你使用下面的代码意味着

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

因此您可以使用[object isWorking]。

这不是基于语义的建议吗?因此,myCar.isWorking在语义上比myCar.working更准确。当然,它更符合键值编码,而不仅仅是风格上的目的?苹果公司建议声明那些
isX
getter,但Xcode无法在自动完成弹出窗口中列出它们,这有点奇怪。(在我的示例中)
working
列在那里,但是
isWorking
没有。所以我认为声明BOOL getters没有任何好处。我必须做更多的事情才能使用它们(声明getter),但我得到的更少(没有自动完成)。你没有回答他的问题,即明确地将getter命名为属性以外的东西的目的是什么(他没有问属性是否是个好主意)。另外,属性允许KVO和KVC,因此您的观点是错误的。您是对的,我忽略了KVO和KVC与基本属性的使用。我认为每个人都在讨论关于isWorking的问题——这是一个命名约定。这是完全错误的
@property
非常适合与基元类型一起使用,并且仅出于一致性的考虑,具有显著的优势。此外,一些基本类型(某些32位CPU上的64位类型和许多32位和64位CPU上的128位类型)在赋值时是非原子的
@property
的原子性在这些情况下也可能是有利的。很有趣——但我怎么知道呢?:)这是原子属性和非原子属性的隐式关系吗?
@property (assign,getter=isWorking) BOOL working;