iOS启动那些事(一)

306 阅读2分钟

App启动时都干了些什么事?

一般情况下,App的启动分为冷启动和热启动。冷启动是指,App点击启动前,它的进程不在系统里,需要系统新创建一个进程分配给它启动的情况。热启动是指,App在冷启动后用户将App退后台,在App的进程还在系统里的情况下,用户重新启动进入App的过程,这个过程做的事情很少。

App启动在一般来看就是从用户点击App开始,到用户看到第一个界面为止。总体来说,App的启动主要包括三个阶段:1、main()函数执行前 2、main()函数执行后 3、首屏渲染完成后。

main()函数执行前

在main()函数执行前,系统主要会做以下几个事情:

  • 加载可执行文件(App的.O文件的集合);
  • 加载动态链接库,进行reabase指针调整和bind符号绑定;
  • Objc运行时的初始处理,包括Objc相关类的注册、category注册、selector唯一性检查等;
  • 初始化,包括了执行+load()方法、attribute((constructor))修饰的函数的调用、创建C++静态全局变量等

main()函数执行后

main()函数执行后的阶段,是从main()函数执行开始,到appDelegate的didFinishLaunchingWithOptions方法里首屏渲染相关方法执行完成。首页相关的业务代码基本都是在这个阶段,主要包含了:

  • 首屏初始化所需配置文件的读写操作;
  • 首屏列表大数据的读取;
  • 首屏渲染的大量计算等;

首屏渲染完成后

首屏渲染后的这个阶段,主要完成的是,非首屏其他业务服务模块的初始化、监听的注册、配置文件的读取等。从函数上来看,这个阶段指的就是截止到didFinishishLaunchingWithOptions方法作用域内执行首屏渲染之后的所有方法执行完成。简单说的话,这个阶段就是从渲染完成时开始,到didFinishLaunchingWithOptions方法作用域结束时结束。

总结:这边文章简短的介绍App启动时发生的事情,下几篇会更详细的介绍和探讨main()函数执行前发生的具体的一些事情,还会根据这篇文章分享一下有关启动优化的方法。敬请不期待!!