懒加载的定义:在创建对象或者计算某个值,或者其他某些开销昂贵的过程中延迟执行的策略。
我们下面举一个例子就更加深入的体会一下他的定义。
class SleepingBeauty {
init() {
print("zzz...沉睡中")
sleep(2)
print("睡美人准备好了!")
}
}
class Castle {
var prinness = SleepingBeauty() //初始化
init() {
print("城堡准备好了")
}
}
let castle = Castle()
zzz...沉睡中
睡美人准备好了!
城堡准备好了
上面这段代码是:我们创建了一个SleepingBeauty类,初始化时候让其延迟了2秒。接着创建了Castle类,它包含了一个SleepingBeauty类对象。 最后我们创建Castle类对象。 我们可以看到他的打印结果。首先去执行SleepingBeauty(),就有了zzz...沉睡中、睡美人准备好了!这两个打印结果。然后在执行castle的初始化方法。我们再来看看懒加载的效果。
class SleepingBeauty {
init() {
print("zzz...沉睡中")
sleep(2)
print("睡美人准备好了!")
}
}
class Castle {
lazy var prinness = SleepingBeauty() //初始化
init() {
print("城堡准备好了")
}
}
let castle = Castle()
castle.prinness
城堡准备好了
zzz...沉睡中
睡美人准备好了!
打印的结果发生了变化。这是由于Castle类中的prinness属性,在创建类对象的时候没有执行。只有在我们使用这个属性的时候,他才去执行。所以执行castle.prinness的时候,打印了对应的结果。
上面的这个例子可以很好的帮我们理解懒加载的意义。
用懒加载来避免可选型
我们可以使用懒加载来避过可选型需求。
class ViewController: UIViewController {
lazy var namelabel:UILabel = UILabel(frame:.zero )
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.view.addSubview(self.namelabel)
self.namelabel.textColor=UIColor.black
self.namelabel.text="这是一个swfit demo"
self.namelabel.font=UIFont.systemFont(ofSize: 14)
}
使用懒加载闭包
class ViewController: UIViewController {
//使用懒加载闭包
lazy var testlabel:UILabel = {
let testlabel = UILabel(frame: .zero)
testlabel.text="这是第二个测试的"
return testlabel
}()
使用工厂进行懒加载
1.工厂方法
lazy var agelabel:UILabel = self.creatLabel()
//静态方法
private func creatLabel()->UILabel{
let label = UILabel(frame: .zero)
label.translatesAutoresizingMaskIntoConstraints = false
label.textColor = .black
label.font = UIFont.systemFont(ofSize: 16, weight: .bold)
return label
}
其实这个和oc中的懒加载类似,翻译成oc的意思就是,在懒加载初始化创建对象时,调用函数方法来创建。
2.静态工厂
lazy var scorelabel:UILabel = UILabel.creatLabel()
extension UILabel{
static func creatLabel()->UILabel{
let label = UILabel(frame: .zero)
label.translatesAutoresizingMaskIntoConstraints = false
label.textColor = .black
label.font = UIFont.systemFont(ofSize: 16, weight: .bold)
return label
}
}
这种方式,对应oc中的:通过类扩展或者类别,来初始化创建懒加载对象。
以上就是懒加载的一些知识点,后续项目中遇到懒加载问题再补充吧。
网友评论