Objective c 使用BOOL属性
Apple建议通过以下方式声明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
@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;