Iphone objective-c中布尔值的只读获取程序
所以我不确定我做错了什么。我的类基本上有两个属性:Iphone objective-c中布尔值的只读获取程序,iphone,Iphone,所以我不确定我做错了什么。我的类基本上有两个属性: @property (nonatomic, retain) NSString *name; @property (nonatomic, readonly) BOOL isValid; 逻辑应该是,如果名称不是nil,那么isValid=YES,否则为NO。所以我写为: - (BOOL)isValid { if (self.name) // breakpoint was set here. return YES;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, readonly) BOOL isValid;
逻辑应该是,如果名称不是nil,那么isValid=YES,否则为NO。所以我写为:
- (BOOL)isValid {
if (self.name) // breakpoint was set here.
return YES;
else
return NO;
}
当我打印出描述时,我得到了相反的效果。不知道为什么。我试图通过调试程序来实现这一点。当它在这个方法上停止时,我查看self中的值,我查看name
属性,值为nil。但是,在我进入之后,当调试器位于returnno语句时,它的name
属性中填充了正确的值
我想我可以在基于该条件创建对象时设置isValid标志,但如果self.name是否为nil,我想我就不必这样做了。有人知道如何解决这个问题吗?谢谢
编辑:
我的超类是NSObject
在同一个类中,还有另外两个属性,其中我基本上具有相同类型的逻辑
@property (nonatomic, retain) NSString *AA;
@property (nonatomic, readonly) BOOL isCodingRegion;
- (BOOL)isCodingRegion {
if (self.AA) {
return YES;
}
else {
return NO;
}
}
这一逻辑确实有效。听起来真的不对。您是否覆盖了
-(NSString*)名称
?另外,这个类的超类是什么?如何打印描述?对于名称
,您可能应该在@属性
上使用复制
关键字。目前,您只有一个指向字符串对象的指针,它可能会从您的下方发生变化。您不是为name
使用惰性getter吗?您可能会忘记返回初始化的值。这是假设是有效的
一次给你一个错误的结果,然后工作正常,对吗?听起来真的不对。您是否覆盖了-(NSString*)名称
?另外,这个类的超类是什么?如何打印描述?对于名称
,您可能应该在@属性
上使用复制
关键字。目前,您只有一个指向字符串对象的指针,它可能会从您的下方发生变化。您不是为name
使用惰性getter吗?您可能会忘记返回初始化的值。这是假设isValid
一次给你一个错误的结果,然后工作正常,对吗?