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