【高级iOS】启动时间优化
2018-05-09 本文已影响1166人
找不到工作的iOS
-
时间分为两个部分 T1(main前) + T2(main后), {T1:系统环境布局时间:创建进程,加载解析可执行文件(库加载,堆栈环境配置等等), T2:从main函数到第一个界面显示时间}
-
1 库加载越多,启动越慢
-
2 Objc类越多,越慢
-
3 静态对象全局对象越多,启动越慢
-
4 Objc的 +load越多,启动越慢
我们比较能把控的点:load 和 T2时间上进行优化
- 每个objc类都有一个
+load
函数,而它的调用优先级在调用main
函数之前 -
通过以下操作可以论证上述的观点
优化3.png
- 编译,控制台输出如下
2018-05-09 17:02:43.610114+0800 demo[6371:689596] +[ViewController load]
2018-05-09 17:02:43.613407+0800 demo[6371:689596] main
(lldb)
- 结论1:尽量避免过多使用
+load
方法,可以使用+initlalize
替代
在系统第一次使用到这个类的使用,才会使用到他的+(void)initlalize
方法,比如:
【 A alloc】init】
// 第一次执行的时候,会先执行 A的nitialize 然后才alloc
- 结论2:减少
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
里面的操作,在启动页出现后再进行相关操作.(例如放到子线程中去执行)
关于每个objc文件的+load函数的执行循序
- 每个objc文件都有
+load
方法,那么他们的执行顺序是怎么样的?
优化4.png - 此处的文件顺序,决定了
+load
的执行顺序