APP启动分为冷启动和热启动。
冷启动:App 点击启动前,它的进程不在系统里,需要系统新创建一个进程分配给它启动的情况。
热启动:App 在冷启动后用户将 App 退后台,在 App 的进程还在系统里的情况下,用户重新启动进入 App 的过程。
冷启动分两个阶段。
第一个阶段:程序启动到main函数。
第二个阶段:main函数到显示第一个界面。
第一个阶段做了什么?
1.加载可执行文件。
2.加载动态链接库。
3.Objc 运行时的初始处理,包括 Objc 相关类的注册、category 注册、selector 唯一性检查等。
4.初始化,包括了执行 +load() 方法、创建 C++ 静态全局变量。
如何优化第一阶段?
1.减少动态库加载。
2.减少加载启动后不会去使用的类或者方法。
3.+load() 方法里的内容可使用 +initialize() 方法替换掉。因为在一个 +load() 方法里,进行运行时方法替换操作会带来 4 毫秒的消耗。
4.控制 C++ 全局变量的数量。
第二个阶段做了什么?
1.运行appDelegate中didFinishLaunchingWithOptions里面的代码。
2.执行首页初始化所需配置文件的读写操作。
3.首页数据的读取和计算。
如何优化第二阶段?
1.少在didFinishLaunchingWithOptions里做操作。
2.如果不是必要的操作,就放在第一页面加载完毕之后在做,如果是必要的耗时操作,就用子线程的方式去做。
网友评论