App启动流程
启动类型概览 iOS应用启动分为三种类型: 启动类型 描述 特点 冷启动(Cold Launch) App完全不在内存中,需要从头开始加载 耗时最长,需要完整执行所有启动流程 热启动(Warm Launch) App在后台被挂起(Suspended),重新进入前台 最快,只需恢复App状态,不需要重新创建进程 预热启动(Pre-warm Launch) 系统预测用户可能启动App,提前在后台执行部分启动流程 iOS 15+引入,介于冷启动和热启动之间 graph LR subgraph "冷启动(耗时最长)" A1[创建进程] --> A2[加载dylib] A2 --> A3[Rebase/Bind] A3 --> A4[+load] A4 --> A5[main] A5 --> A6[首帧渲染] end subgraph "预热启动(iOS 15+)" B1[系统提前完成(后台):创建进程 → 加载dylib → Rebase/Bind] --> B2[用户点击后执行:+load → main → 首帧渲染] end subgraph "热启动(最快)" C1[唤醒进程] --> C2[WillEnterForeground] C2 --> C3[DidBecomeActive] C3 --> C4[恢复UI] end 一、冷启动(Cold Launch) 冷启动是最完整的启动流程,也是启动优化的主要关注点。 冷启动流程概览 flowchart TD Start([App 冷启动流程]) --> PreMain subgraph PreMain["Pre-main 阶段"] direction TB A[加载可执行文件] --> B[加载动态库(包括 Swift Runtime)] B --> C[Rebase & Bind] C --> D[ObjC Runtime 初始化(类注册、Category 附加)] D --> D2[Swift Runtime 元数据注册(类型元数据、协议遵循表)] D2 --> D3[调用 +load 方法] D3 --> E[执行 Initializers(C++静态构造函数、__attribute__)] end PreMain --> MainPhase subgraph MainPhase["main 阶段"] direction TB F[main函数] --> G[UIApplicationMain] G --> H[AppDelegate回调] H --> I[首帧渲染(创建Window、RootViewController、首屏UI)] end MainPhase --> End([启动完成]) Pre-main 阶段 Pre-main阶段是指从用户点击App图标到main函数执行之前的过程,这个阶段主要由dyld(动态链接器)负责。 ...