是否可以在不调用getter的情况下检查属性是否为nil?

时间:2014-07-21 16:32:04

标签: ios objective-c properties getter null

我有一个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...
    }
}

3 个答案:

答案 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的情况下访问变量。但是,虽然下划线是标准约定,但它不是必需的,只需调用变量,您也可以直接访问内部变量。