Swift语法:懒惰

时间:2016-04-06 14:45:36

标签: swift

今天我看到一些令我困惑的代码:

lazy var variable = {......}()

我希望有人可以向我解释lazy的用法。

3 个答案:

答案 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)

在您的问题中发布的示例代码中,延迟限定符会导致实例变量初始化为赋值一次,并且仅在引用变量时。在这个例子中,赋值实际上是闭包评估的结果,这可能是昂贵的。将变量标记为惰性会减少实例化对象时的开销,方法是推迟对闭包的求值,直到实际使用该变量为止。此外,赋值可能具有在变量初始化的正常阶段期间不会满足的依赖性,但是在变量的第一次访问期间将满足。因此,延迟初始化可以允许在更合适的时间初始化变量。