我有一个UILabel
属性,通常是nil
,但我编写了这样的代码,当我使用它时,如果它是nil
,它将被初始化并准备好通过吸气剂使用。但是,我创建了一个错误,因为当我检查此属性是否为nil
时,它会初始化它,使其不再是nil
。
是否可以在不调用其getter方法的情况下查明属性是否为nil
?
if (self.myLabel) {
//run code when this property already is initialized, but don't if it is nil
}
//Getter:
- (UILabel *)myLabel {
if (!_myLabel) {
_myLabel = [UILabel alloc] init...
}
}
答案 0 :(得分:2)
一种方法是提供单独的BOOL
属性,告诉来电者_myLabel
变量是否为nil
:
@property (nonatomic, readonly) BOOL isLabelSet;
...
-(BOOL)isLabelSet {
return _myLabel != nil;
}
假设您拥有该类的源代码,您还可以通过明确声明并将其标记为@public
来启用对烘焙变量的直接访问,但这样做会破坏封装。
答案 1 :(得分:0)
您唯一的选择是改变:
if (self.myLabel) {
为:
if (_myLabel) {
答案 2 :(得分:0)
更新以下讨论:
使用调用_myLabel
将允许您在不调用getter的情况下访问变量。但是,虽然下划线是标准约定,但它不是必需的,只需调用变量,您也可以直接访问内部变量。