微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift lazy 懒加载

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.其它来源

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐