【问题标题】:Lazy instantiation in Setter or getter?在 Setter 或 getter 中延迟实例化?
【发布时间】:2013-06-10 05:54:55
【问题描述】:

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

【问题讨论】:

  • 你能告诉我们你的代码吗?现在太抽象了
  • 这与 Xcode、iOS 5 和 iOS 6 无关。

标签: objective-c lazy-initialization


【解决方案1】:

我认为 getter 是一个更好的地方。如果首先调用 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];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2016-09-14
    相关资源
    最近更新 更多