这里每天分享一个 iOS 的新知识,快来关注我吧
前言
我们在日常开发中经常会使用 static
声明静态属性,但是你知道静态属性的创建时机是什么时候吗?
我听到有人说在应用启动时,静态属性过多会影响启动速度,今天就来解释下这个问题。
我们先来看一道面试题,求问下面的代码是否会执行 MyClass
的 init
方法?
swift
class ViewController: UIViewController {
static let myClass = MyClass()
override func viewDidLoad() {
super.viewDidLoad()
}
}
class MyClass {
init() {
print("MyClass init")
}
}
先说答案,不会执行。
静态属性懒加载
其实 static
声明的静态属性是懒加载的,而且这种懒加载是隐藏式的,因为当你想为这个属性加上一个 lazy
关键字时,Xcode 会报这个错:
错误提示:Class stored properties not supported in classes; did you mean 'static'?
从这个错误提示中可以看出,static
已经是一个懒加载的属性了。
另外,也可以在 viewDidLoad
中调用一下这个属性来证明:
scss
override func viewDidLoad() {
super.viewDidLoad()
print(Self.myClass)
}
打印结果为:
vbnet
MyClass init
TestProject.MyClass
这也从侧面证明了 static
是一个懒加载的属性。
最后
其实知道了 static
是一个懒加载的属性,就不用再担心所有的 static
属性都在启动应用时创建了,static
属性过多也不会影响启动速度的。
这里每天分享一个 iOS 的新知识,快来关注我吧
本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!