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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值