在Setter或getter中实现懒惰?

时间:2013-06-10 05:54:55

标签: objective-c lazy-initialization

嗨,当你进行懒惰的实例化时,你应该在setter或getter中进行吗?我听说你是在getter中做的,但如果属性在getter调用之前设置了怎么办?这是否意味着该物业仍然是零?另外,如果你在getter中实例化懒惰并且有人调用了setter函数,但是你在setter中没有懒惰实例化什么是属性值?

1 个答案:

答案 0 :(得分:0)

我认为吸气剂是一个更好的地方。如果首先调用setter - 那么它会将属性设置为要求它执行的任何操作,并且没有人关心属性的先前值是什么。

- (id)foo
{
    if (_foo == nil) {
        _foo = [[Foo alloc] init];
    }
    return _foo;
}

- (void)setFoo:(id)f
{
    if (_foo != f) {
        [_foo release]; // Yay, messaging nil is safe!
        _foo = [f retain];
    }
}