swift lazy 懒加载

swift lazy 懒加载,第1张

概述class ClassA { lazy var str: String = { let str = "Hello" print("只在首次访问输出") return str }()} 我们在使用 lazy 作为属性修饰符时,只能声明属性是变量。另外我们需要显式地指定属性类型,并使用一个可以对这个属性进行赋值的语句来在首次访问属性时运
class ClassA {    lazy var str: String = {        let str = "Hello"        print("只在首次访问输出")        return str    }()}

我们在使用 lazy 作为属性修饰符时,只能声明属性是变量。另外我们需要显式地指定属性类型,并使用一个可以对这个属性进行赋值的语句来在首次访问属性时运行。如果我们多次访问这个实例的 str 属性的话,可以看到只有一次输出


加载的作用:

移动设备的内存使用比较紧张,根据开发原则,当真正需要的时候再创建资源,并在第一时间销毁,延时加载是它的一个 重要特性,另一方面是把对象相关的所有方法 封装到一小段代码里面,这样可以将代码的耦合度进行解耦,并提升系统性能,

在创建视图层次的时候有可能会把所有的代码写在一起,甚至会有相互依赖关系,会造成代码调试不方便,甚至当前不需要,会一下子全部创建出来,造成内存浪费,这样代码的维护难度也会增加.


swift中懒加载的本质:就是一个闭包


swift中懒加载的格式:

lazy var @R_404_6889@:type {    code   return }()

比如对一个按钮进行懒加载,简单代码如下:
lazy var composebutton: UIbutton = {    let button = UIbutton(type: UIbuttonType.ContactAdd)    return button}()


下面是实际项目中用到的代码:

lazy private var composebutton: UIbutton = {        let button = UIbutton()                //添加按钮图片        button.setimage(UIImage(@R_404_6889@d: "tabbar_compose_icon_add"),forState: UIControlState.normal)        button.setimage(UIImage(@R_404_6889@d: "tabbar_compose_icon_add_highlighted"),forState: UIControlState.Highlighted)        button.setBackgroundImage(UIImage(@R_404_6889@d: "tabbar_compose_button"),forState: UIControlState.normal)        button.setBackgroundImage(UIImage(@R_404_6889@d: "tabbar_compose_button_highlighted"),forState: UIControlState.Highlighted)                //将按钮添加到tabbar中        self.tabbar.addSubvIEw(button)        //添加点击监听行为        button.addTarget(self,action: "clickComposebutton",forControlEvents: UIControlEvents.touchUpInsIDe)                        return button    }()

懒加载的原理:

当访问tabbar里面的按钮时,查看按钮是否存在,如果存在则直接返回一个button,如果不存在,说明是初次访问,就会存储后再给tabbar返回一个button.当后续访问时不再执行闭包的代码,直接返回对应内存空间的内容


参考:

1.王巍 (onevcat). “Swifter - 100 个 Swift 必备 Tips (第二版)”

2.其它来源

总结

以上是内存溢出为你收集整理的swift lazy 懒加载全部内容,希望文章能够帮你解决swift lazy 懒加载所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1083907.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存