当在尚未分配+初始化的属性上调用二传手/getter时会发生什么?



我有一个关于objective-c的简单问题。

我已经学会了通过合成属性,然后以以下方式重写getter,来懒惰地实例化属性。

-(SomeClass *)someProperty {
    if ( !_someProperty )
        _someProperty = [[SomeClass alloc] init ]
    return _someProperty
}

如果我不这样做会发生什么?我问这个问题是因为我有没有分配的财产&以这种方式实例化,它们似乎(也许不是)表现得很好。

我唯一的猜测是,如果一处房产是未分配的&实例化后,它将保留为零;在这种情况下,发送消息nil不会有任何作用。这是正确的吗?

提前感谢您的帮助!

是的,消息传递nil很好。您不必覆盖任何getter来延迟初始化您的属性。请参阅:https://developer.apple.com/library/ios/documentation/cocoa/conceptual/objectivec/Chapters/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-SW7

创建对象时,实例变量会自动设置为nil(对于基元类型,则为0),因此您不必担心向未初始化的属性发送消息。

是的,如果你试图向nil发送消息,什么都不会发生。这是分配和初始化它的要点。分配只会让属性在内存中占有一席之地。

最新更新