我对懒惰实例化的理解是它应该在
的情况下使用然而,越来越多的代码就像这样[伪代码]:
class SomeClass {
lazy var itemSize: CGSize = { return CGSize(width: 80, height: 80) }()
....
init() {
[use itemSize for some init work]
}
}
对我来说,这没有意义,因为itemSize总是需要初始化,并不昂贵并且不依赖于任何未知属性。我错过了什么吗?
答案 0 :(得分:3)
你是完全正确的。
在特定情况下,不需要进行惰性实例化。
您说的案件也是正确的。
但是,在这种情况下使用延迟实例化不应该产生任何巨大的不利影响。
但是,如果我认为我会将其更改为let
并删除lazy
。 (特别是如果它在任何时候都没有变异)。
答案 1 :(得分:1)
实际上你已经省略(或省略了你的第三个要点)lazy
实例属性的最常见原因:它们可以显式或隐式地引用self
,而普通实例属性不能。
另一点:lazy
实例属性不必是定义和调用匿名函数,在你给出的愚蠢示例中,没有任何理由可以这样做。这也可以做到:
lazy var itemSize: CGSize = CGSize(width: 80, height: 80)
lazy
和define-and-call都很有用,并且通常很有用,但不要混淆它们。