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>
答案:可选值。
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览114437 人正在系统学习中 相关资源:maestro:面向懒惰软件开发人员的智能部署系统-其它代码类资源…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!