今天我看到一些令我困惑的代码:
lazy var variable = {......}()
我希望有人可以向我解释lazy
的用法。
答案 0 :(得分:1)
延迟初始化(有时也称为延迟实例化或延迟加载)是一种延迟创建对象或其他昂贵进程的技术,直到需要。在为iOS编程时,这有助于确保在需要时仅使用所需的内存。
事实上,这种技术非常有用,Swift使用lazy属性添加了对它的直接支持。
要理解为什么这是有用的,让我们首先介绍创建惰性属性的旧方法。
看看这个link
答案 1 :(得分:0)
lazy var variable: Class = {
<initialisation>
return <resulting object>
}()
相当于:
var _variable: Class?
var variable: Class {
get{
if _variable == nil {
<initialisation>
_variable = <resulting object>
}
return _variable!
}
}
简而言之:它在需要时初始化对象
答案 2 :(得分:0)
在您的问题中发布的示例代码中,延迟限定符会导致实例变量初始化为赋值一次,并且仅在引用变量时。在这个例子中,赋值实际上是闭包评估的结果,这可能是昂贵的。将变量标记为惰性会减少实例化对象时的开销,方法是推迟对闭包的求值,直到实际使用该变量为止。此外,赋值可能具有在变量初始化的正常阶段期间不会满足的依赖性,但是在变量的第一次访问期间将满足。因此,延迟初始化可以允许在更合适的时间初始化变量。