Swift中隐式懒惰的静态成员

时间:2016-01-07 23:36:11

标签: swift static swift2 lazy-loading static-members

我刚才注意到Swift <a href="" class="btn btn-white dropdown-toggle" dropdown-toggle> {{vm.selectedRotation}} <span class="caret"></span> </a> 的{​​{1}}成员隐含static

例如,这只会调用structs一次:

lazy

这背后的理由是什么?

如果我想要相反的行为怎么办?

1 个答案:

答案 0 :(得分:76)

static属性定义了一个“类型属性”,一个实例化一次且仅一次。正如你所注意到的,这种情况很懒散,因为静态就像全局变量一样。正如The Swift Programming Language: Properties所说:

  

总是以与Lazy Stored Properties类似的方式懒惰地计算全局常量和变量。与延迟存储的属性不同,全局常量和变量不需要使用lazy修饰符进行标记。

这种隐含的懒惰行为是因为,Swift Blog: Files and Initialization表示:

  

它允许自定义初始化程序,Swift中的启动时间干净利落,没有全局初始化程序来减慢速度,执行顺序完全可以预测。

他们有意识地设计了这种方式,以避免不必要地延迟应用程序的启动。

如果要在应用程序的某个特定位置实例化static属性(而不是将其推迟到第一次使用的位置),只需在前一点和对象上引用此static属性即可。将在那时初始化。鉴于我们在减少启动应用程序的延迟方面所付出的努力,您通常不会在应用程序的首次启动期间同步,但您可以随时随地进行此操作。

相关问题