Swift懒加载

作者: Homer1ynn | 来源:发表于2016-09-13 09:39 被阅读358次
    • 懒加载的2个好处:

      • 延迟加载属性(UI类型控件一般都会延迟加载)
      • 在后边的代码中,延迟加载的属性,不用再强制解包
    • 懒加载的2种创建方式:

      • 方法一:
        直接声明属性:

        private lazy var btn: UIButton = UIButton()
        // 之后再添加大view之前进行相关属性设置即可,这样在使用的时候即可触发懒加载
        
      • 方法二:
        使用完整的闭包创建:

        private lazy var btn = { () -> (UIButton) in
            let btn = UIButton()
            return btn
        }()
        

        在这种方式中,() -> (UIButton) in是尾随闭包,可以省略,省略以后,格式如下:

        private lazy var btn = {
            let btn = UIButton()
            return btn
        }()
        

      总结:建议使用方法一进行创建,原因如下:

      • 方法二使用闭包方式,闭包中的智能提示不够完善

      • 闭包中引用全局变量需要使用self.调用,需要注意

      • 闭包中容易产生循环引用

    • 注意:

      • swift中的懒加载和oc中有一个地方是不同的,当oc中的懒加载对象置nil以后,重新使用self.调用,就会重新创建视图,但是swift中不会,所以swift中不能随意将懒加载对象置nil
    • 同getter和setter的比较:

      • 懒加载的属性是会保存的,懒加载的本质是闭包,当第一次加载过属性以后,闭包就不会再执行,所以懒加载创建的属性会分配存储空间并进行保存,而计算型属性不会保存,每次使用属性都会重新调用setter和getter

    相关文章

      网友评论

      • 小荣袁:推荐写法:
        这样不必再单独创建一个对象
        let yellowView: UIView = {
        $0.backgroundColor = .yellowColor()
        return $0
        }(UIView())
        Homer1ynn:@小荣袁 嗯嗯
        小荣袁:@HomerIce 其实我也是在这里看到的,觉得这样比较好,充分利用了闭包的第一个参数,减少创建额外的对象,http://swift.gg/2016/09/23/swift-configuring-a-constant-using-shorthand-argument-names/
        Homer1ynn:这种算是闭包的一种简练写法吧,当初不是主要不是记录这个,所以就没有这样写
      • 小荣袁:var也能写成bar
        private lazy bar btn = { () -> (UIButton) in
        let btn = UIButton()
        return btn
        }()
        Homer1ynn:这个不能吧,应该是笔误,我已经改正了.谢谢指正.

      本文标题:Swift懒加载

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