cfi*_*her 46 static lazy-loading static-members swift swift2
我只是注意到staticSwift的成员structs是含蓄的lazy.
例如,这只会调用init一次:
class Baz {
init(){
print("initializing a Baz")
}
}
struct Foo {
static let bar = Baz()
}
var z = Foo.bar
z = Foo.bar
Run Code Online (Sandbox Code Playgroud)
这背后的理由是什么?
如果我想要相反的行为怎么办?
Rob*_*Rob 86
该static属性定义了一个"类型属性",一个实例化一次且仅一次.正如你所注意到的,这种情况很懒散,因为静态就像全局变量一样.正如The Swift Programming Language:Properties所说:
全局常量和变量总是懒惰地计算,与Lazy Stored Properties类似.与延迟存储的属性不同,全局常量和变量不需要使用
lazy修饰符标记.
这种隐含的懒惰行为是因为,正如Swift博客:文件和初始化所说:
它允许自定义初始化程序,Swift中的启动时间干净利落,没有全局初始化程序来减慢它,并且执行顺序是完全可预测的.
他们有意识地设计它以避免不必要地延迟应用程序的启动.
如果要static在应用程序中的某个特定点实例化该属性(而不是将其推迟到首次使用的位置),只需static在该较早的位置引用此属性,该对象将在此时初始化.鉴于我们在减少启动应用程序的延迟方面所付出的努力,您通常不会在应用程序的首次启动期间同步,但您可以随时随地执行此操作.
| 归档时间: |
|
| 查看次数: |
16731 次 |
| 最近记录: |