0

嗨,当您进行惰性实例化时,您应该在 setter 还是 getter 中进行?我听说您在 getter 中执行此操作,但是如果在 getter 调用该属性之前设置了该属性怎么办?这是否意味着该属性仍然为零?另外,如果您在 getter 中延迟实例化并且有人调用了 setter 函数,但您没有在 setter 中延迟实例化,那么属性值是什么?

4

1 回答 1

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];
    }
}
于 2013-06-10T06:06:00.960 回答