class ClassA { lazy var str: String = { let str = "Hello" print("只在首次访问输出") return str }() }
我们在使用 lazy 作为属性修饰符时,只能声明属性是变量。另外我们需要显式地指定属性类型,并使用一个可以对这个属性进行赋值的语句来在首次访问属性时运行。如果我们多次访问这个实例的 str 属性的话,可以看到只有一次输出
懒加载的作用:
移动设备的内存使用比较紧张,根据开发原则,当真正需要的时候再创建资源,并在第一时间销毁,延时加载是它的一个 重要特性,另一方面是把对象相关的所有方法 封装到一小段代码里面,这样可以将代码的耦合度进行解耦,并提升系统性能,
在创建视图层次的时候有可能会把所有的代码写在一起,甚至会有相互依赖关系,会造成代码调试不方便,甚至当前不需要,会一下子全部创建出来,造成内存浪费,这样代码的维护难度也会增加.
swift中懒加载的本质:就是一个闭包
swift中懒加载的格式:
lazy var name: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(named: "tabbar_compose_icon_add"),forState: UIControlState.Normal) button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"),forState: UIControlState.Highlighted) button.setBackgroundImage(UIImage(named: "tabbar_compose_button"),forState: UIControlState.Normal) button.setBackgroundImage(UIImage(named: "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.其它来源
原文链接:https://www.f2er.com/swift/325797.html