lazy

作者: 愤怒小鸟飞呀飞 | 来源:发表于2019-04-30 15:40 被阅读0次
    class ViewController: UIViewController {
       
       
        var label: DemoLabel?
       
        // 初始化并且分配空间 label, 会提前创建
        // 在移动端开发, 延迟加载 减少内存消耗
        // 懒加载 - lazy
        /*
            1. 能够延迟创建
            2. 最大的好处, 可以解除解包的烦恼
         */
       
        // lazy var label2: DemoLabel = DemoLabel()
       
        // 懒加载本质上是一个 闭包
        // 懒加载会在第一次访问的时候执行, 闭包执行结束后, 会把结果保存在 属性 中
        // 后续调用, 直接返回 属性 的内容
        // 懒加载的属性会分配空间, 存储值
        // 只要调用过一次, 懒加载后面的闭包再也不会执行了
       
        // 完整写法
        /*
            {} 包装代码
            () 执行代码
        
            日常开发:
            1. 闭包中的智能提示不好
            2. 闭包中如果出现 self. 还需要注意循环引用
         */
        lazy var label2 = { () -> DemoLabel in
           
            let l = DemoLabel()
           
            // 设置 Label 的属性...
           
            return l
        }()
       
        // 注意: 一旦 label 被设置为 nil, 懒加载也不会再次执行
        // 懒加载的代码只会在第一次调用的时候, 执行闭包, 然后将闭包的结果保存在 label 的属性中
        private lazy var label3: UILabel? = UILabel()
       
    
        override func viewDidLoad() {
            super.viewDidLoad()
           
    
            // 设置 UI
            setupUI()
           
           
            label3?.text = "hello"
            label3?.sizeToFit()
           
            print(label3 as Any)
           
            label3 = nil
           
            print(label3 as Any)
        }
       
        private func setupUI()
        {
            // 1. swvf控件
            label = DemoLabel()
           
            // 添加到视图
            // ! 解包, 为了参与计算, addSubView 用 subViews 数组记录控件, 数组中不允许加入 nil
            // ? 可选解包, 调用方法, 如果为 nil, 不调用方法, 但是不能参与计算
            view.addSubview(label!)
           
            label?.text = "hello"
            label?.sizeToFit()
            label?.center = view.center
        }
       
        override func didReceiveMemoryWarning()
        {
            // Swift 中一定注意不要主动清理视图或者控件
            // 因为懒加载不会再次创建
        }
    }
    

    相关文章

      网友评论

          本文标题:lazy

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