一、启动阶段(pre-main)
- 解析info.plist
- 加载相关信息,如闪屏
- 沙盒建立,权限检查
- Mach-O加载
- 如果是二进制文件,寻找合适当前的CPU类别的部分
- 加载所有依赖的Mach-O文件(递归调用Mach-O加载方法)
- 定位内部、外部指针引用、例如字符串,函数
- 执行声明位attribute(constructor)的C函数
- 加载类的扩展中的方法
-
二、程序执行阶段(main)
main函数
- 执行UIApplicationMain函数
- 创建UIApplication对象
- 创建UIApplicationDelegate对象并复制
- 读取配置文件info.plist,设置程序启动的一些属性
- 创建应用程序的Main Runloop循环
- UIApplicationDelegate对象开始处理监听事件
- 程序启动之后,首先调用application.didFinishLaunchingWithOptions:方法
- 如果info.plist中配置了启动的storyboard的文件名,则加载storyboard文件
- 如果没有配置storyboard, 则根据代码创建UIWindow->rootViewController->显示
三、app的冷启动和热启动
冷启动:首次安装启动,或者开机后首次启动