当一个人在没有分配+初始化的属性上调用setter / getter时会发生什么?

时间:2012-02-17 00:34:44

标签: objective-c ios

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

我被教导通过合成它们然后以下列方式覆盖吸气剂来懒惰地实例化我的属性。

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

当我不这样做时会发生什么?我问这个是因为我有没有分配的属性&以这种方式实例化,他们似乎(可能不是)表现得很好。

我唯一的猜测是,如果一个房产未分配&实例化它将保留为零;在这种情况下,消息传递nil什么都不做。这是对的吗?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

嗯,是的,如果你尝试发送一条消息给零,那就什么都不会发生。这是分配它并初始化它的要点。分配只是让财产在记忆中占有一席之地。