Swift懒加载

作者: iOS开发章鱼哥 | 来源:发表于2015-08-06 14:08 被阅读12845次

    Swift 懒加载小议

        lazy var zyTableView: UITableView = {
        
        let tempTableView = UITableView (frame: self.view.bounds, style: UITableViewStyle.Plain)
        tempTableView.delegate = self
        tempTableView.dataSource = self
        return tempTableView
    }()
    
    
    
    这是Swift中懒加载一个叫做zyTableView的变量。
    我们今天就主要来说说这段代码.
    

    先来说一下懒加载的好处:

    • 需要的时候初始化内存,对内存开销较小,节省内部资源
    • 代码初始化放在一起,代码块比较好划分,方便别人和自己阅读

    再来说一下有争议的地方,我刚才在几个群里问懒加载效率低不低,有不同意见,有人说低,也有人说不低,我觉得懒加载效率是低的,最简单的说法:

    在你需要使用肥皂的时候,你没有肥皂,然后去捡一个肥皂,和你需要使用肥皂的时候就有肥皂了,你觉得哪个效率高?懒加载就是现去捡肥皂呀,所以,懒夹在效率低。
    

    再来看看Swift中懒加载的本质,引用绝影的原话:

    它本质在siwft中确实是一个闭包,执行顺序是这样的,如果这个lazy修饰的变量没值,就会执行闭包中的东西,不是每次都执行(本人补充:这也就是为什么在Swift中的懒加载没有oc中判断。if(xx==nil){初始化xx}的代码段)。
    

    在来看下一个问题,既然懒加载在Swift中是一个闭包,那么就用闭包来复写一个懒夹在咯:

    let name = { () -> String in
       
       return "章鱼哥"
       
    }
    
    lazy var myName:String = self.name()
    

    最后呢,如果懒夹在初始化失败怎么办?
    答案:可能值咯。

    lazy var value1:String = {
        return "aaa"
    }()
    
    lazy var value2:String? = {
        
        return nil
    }()
    
    lazy var value1:String  等价于 lazy var value1:String!
    

    就这样,哪里说的不对,留个言,我立马改。

    重要的话说好几遍:

    本文宇宙超级无敌感谢绝影。

    本文宇宙超级无敌感谢绝影。

    本文宇宙超级无敌感谢绝影。

    本文宇宙超级无敌感谢绝影。

    本文宇宙超级无敌感谢绝影。

    本文宇宙超级无敌感谢绝影。

    相关文章

      网友评论

      • WSWshallwe:懒加载 不单单是需要的时候才去弯腰捡肥皂。第一次拿完肥皂后,以后你还需要肥皂的时候就知道在哪里了 直接拿了。。不用重新再去弯腰捡一块了
      • Wang66:懒加载并不是绝对或必须的,这个要根据具体情况考量使用。懒加载主要的意义是延迟加载时间,等到程序真正有必要的时候才执行,那它所适用的场景就是比如,APP中某个界面有个地方,并不是每次都显示或都有操作使代码执行,而是用户当用户触发后才执行,这样的话就适合懒加载,等到真正需要的时候才加载它。但这也不是绝对的,若有时候这块加载若是耗时性的动作,当用户触发时才懒加载执行的话会让用户有等待时间,造成操作不流畅,所以,这种情况可以考虑让这块代码事先就加载好,以便等到用户触发时,可以流畅无阻的执行下去。

        总之,要根据具体场景考量使用。
      • Stroman:我收藏了你的文章
      • ethan_cun:懒加载影响编译速度
      • zhangqi0431:捡肥皂时要小心
      • 巴图鲁:不错
      • 不辣先生:swift中你复写闭包,可选其实没用的,swift懒加载跟oc不同,不会因为值为nil就会去执行,swift中的懒加载只会执行一次
      • 儒雅的减肥大哥:创建一个tableview有必要用懒加载嘛~ 刚学swift,表示不解~
        Charles___:@儒雅的小甜甜斌 有必要的 - -。难道说oc中懒加载了,swift就不懒加载了?- -
      • bf7edeaa0ddd:硬件足够,优先考虑效率,否则也是浪费啊不是吗
      • 南月一高灯:写的很好,加油
        共勉
      • 无事在心头:这个…楼主你错别字比较多,难道swift的懒加载原理和oc不一样吗?懒加载明显很节省资源不是吗?
        Charles___:@抠脚妹 没感觉效率低, 后期优化代码,就知道懒加载对你优化和扩展程序的效率影响了
        无事在心头:@羊羊运动会 是的,一方面节省资源,一方面确实效率低
        d2b6e1ff0050:@抠脚妹 节省资源和影响效率其实不是一回事。
      • GoGooGooo:Swift需要懒加载么?
        Swift中的懒加载好像里边不像OC,什么属性都可以在里边设定。
        至恒之狐:我觉得我现在使用懒加载大部分不是使用懒加载效果,而是为了模块化,不在单独为一个模块再去写一个方法名之类。
        无事在心头:@hosea_zhou 主要是只创建一次,以后直接用就行了
        9b27b67eccb4:@Peter__Pan 用到时再加载不是更好?

      本文标题:Swift懒加载

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