image.png

一、启动阶段(pre-main)

  • 解析info.plist
  • 加载相关信息,如闪屏
  • 沙盒建立,权限检查
  • Mach-O加载
  • 如果是二进制文件,寻找合适当前的CPU类别的部分
  • 加载所有依赖的Mach-O文件(递归调用Mach-O加载方法)
  • 定位内部、外部指针引用、例如字符串,函数
  • 执行声明位attribute(constructor)的C函数
  • 加载类的扩展中的方法
  • C++静态对象加载,调用Objc的+load函数

    二、程序执行阶段(main)

  • main函数

  • 执行UIApplicationMain函数
  • 创建UIApplication对象
  • 创建UIApplicationDelegate对象并复制
  • 读取配置文件info.plist,设置程序启动的一些属性
  • 创建应用程序的Main Runloop循环
  • UIApplicationDelegate对象开始处理监听事件
  • 程序启动之后,首先调用application.didFinishLaunchingWithOptions:方法
  • 如果info.plist中配置了启动的storyboard的文件名,则加载storyboard文件
  • 如果没有配置storyboard, 则根据代码创建UIWindow->rootViewController->显示

三、app的冷启动和热启动

冷启动:首次安装启动,或者开机后首次启动