美文网首页
Swift笔记(四)-懒加载

Swift笔记(四)-懒加载

作者: Harry__Li | 来源:发表于2022-02-09 14:52 被阅读0次

懒加载的定义:在创建对象或者计算某个值,或者其他某些开销昂贵的过程中延迟执行的策略。
我们下面举一个例子就更加深入的体会一下他的定义。

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中的:通过类扩展或者类别,来初始化创建懒加载对象。
以上就是懒加载的一些知识点,后续项目中遇到懒加载问题再补充吧。

相关文章

网友评论

      本文标题:Swift笔记(四)-懒加载

      本文链接:https://www.haomeiwen.com/subject/ejmwkrtx.html