objc-zen-book-cn
objc-zen-book-cn copied to clipboard
你在第一次访问的时候改变了初始化的消耗,产生了副作用,这会让优化性能变得困难(以及测试)
“你在第一次访问的时候改变了初始化的消耗,产生了副作用,这会让优化性能变得困难(以及测试)” 请问这句话怎么理解?
我的理解是这样:
原来对象创建的时候,可能在 init 系列方法就做了一些初始化工作(打开文件,绑定端口,初始化成员变量等等),如上面的代码的例子是初始化 _dateFormatter。使用 lazy initialization 的时候,只有你第一次调用的时候 -dateFormatter 方法,才会做这些初始化的工作。
假如这些初始化工作很消耗性能,或者有一些问题,那么这些问题在对象初始化的时候就能被创建出来。但是使用 lazy initialization 后,实际的初始化工作是在后续某个执行过程中,才会做这些操作。那么你去测试性能或者用 Instrument 这些工具,就要去追踪后面的执行过程什么时候会调用到这个地方了,而不是单纯看哪个对象创建的时候比较耗时。