Swift – 懒加载(lazy initialization)

Swift中是存在和OC一样的懒加载机制的,在程序设计中,我们经常会使用  ,顾名思义,就是用到的时候再开辟空间

 

懒加载

  • 格式:
  • 懒加载的写法本质上是定义并执行一个闭包

// 懒加载

    private lazy var inputeTextField: UITextField = {

        let inputeTextField = UITextField()

        inputeTextField.keyboardType = .NumberPad

        /*

         8种键盘风格:

        UIKeyboardTypeDefault,                // 默认键盘:支持所有字符

        UIKeyboardTypeASCIICapable,           // 支持ASCII的默认键盘

        UIKeyboardTypeNumbersAndPunctuation,  // 标准电话键盘,支持+*#等符号

        UIKeyboardTypeURL,                    // URL键盘,有.com按钮;只支持URL字符

        UIKeyboardTypeNumberPad,              //数字键盘

        UIKeyboardTypePhonePad,               // 电话键盘

        UIKeyboardTypeNamePhonePad,           // 电话键盘,也支持输入人名字

        UIKeyboardTypeEmailAddress,           // 用于输入电子邮件地址的键盘

        */

        inputeTextField.delegate = self

        inputeTextField.hidden = true

        return inputeTextField

    }()

 

我们在OC中一般是这样实现懒加载初始化的:

   1: @property (nonatomic, strong) NSMutableArray *players;

 

实际上我们可以这样写:

 

比如iOS开发中的最常用控件,实现数据源方法的时候,通常我们都会这样写

Objective-C

上面的的代码中

其实就是利用

的特性,为属性生成了和方法,而这里是调用的方法,但是上述代码中 会调用

这样调用,如果成员属性dataArray 开始没有赋值的,那么在使用的时候,调用get方法,不重写的话,会报错,空指针,所以一般我们会重写get方法

这样写,就防止了成员属性为没有赋值的情况

综上所述,Objective-C的懒加载,其实就是调用成员属性的get方法,初始化值,而Swift的懒加载,是和Objective-C不同的


Swift

而这句

在 存储属性必须初始化,确认类型,或者用可选类型,总之要确认类型,毕竟t是类型安全语言,所以提出了属性,用法

上述的代码,有点难理解,如果之前会的 或者对的函数指针理解透彻的,可以看成是一个代码块,然后的时候,就执行了代码块,但是重复调用, 属性的代码块只会调用一次,修饰的是一个存储属性,而存放的是闭包,我想内部,应该进行了优化

 

Swift 懒加载小议

先来说一下懒加载的好处:

  • 需要的时候初始化内存,对内存开销较小,节省内部资源
  • 代码初始化放在一起,代码块比较好划分,方便别人和自己阅读

再来说一下有争议的地方,我刚才在几个群里问懒加载效率低不低,有不同意见,有人说低,也有人说不低,我觉得懒加载效率是低的,最简单的说法:

再来看看Swift中懒加载的本质,引用绝影的原话:

在来看下一个问题,既然懒加载在Swift中是一个闭包,那么就用闭包来复写一个懒夹在咯:

最后呢,如果懒夹在初始化失败怎么办/span>
答案:可选值。

 

转载于:https://www.cnblogs.com/gongyuhonglou/p/6054862.html

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览114437 人正在系统学习中 相关资源:maestro:面向懒惰软件开发人员的智能部署系统-其它代码类资源…

来源:weixin_30411997

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年10月9日
下一篇 2016年10月9日

相关推荐