学习在启动时的代码执行顺序。
概览
一个 App 的启动需要经过许多复杂的步骤,其中大部分由 UIKit 自动处理。在启动过程中,UIKit 会调用 App 代理中的方法,因此我们可以执行自定义的任务。图中的步骤展示了从 App 启动的时间开始直到被认为初始化完成的过程。
- 由用户显式或系统隐式启动 App。
- Xcode 提供的
main
函数调用 UIKit 的UIApplicationMain(_:_:_:_:)
函数。 UIApplicationMain(_:_:_:_:)
函数创建UIApplication
对象和 App 代理。- UIKit 从主 storyboard 或 nib 文件加载 App 的默认界面。
- UIKit 调用 App 代理的
application(_:willFinishLaunchingWithOptions:)
方法。 - UIKit 执行状态恢复(state restoration),即调用 App 代理和视图控制器中的额外的方法。
- UIKit 调用 App 代理的
application(_:didFinishLaunchingWithOptions:)
方法。
当初始化完成,系统将 App 转到激活(前台)状态或后台状态。当 App 转到激活状态,其窗口出现在屏幕上,并开始响应用户交互。当 App 转到后台状态,其窗口保持隐藏,并在被暂停前运行极短的时间。
不管 App 启动到前台还是后台,大部分启动时间初始化的代码应当是相同的。举个例子,我们应当依旧初始化 App 的数据结构,并设置 App 用户界面。但是,如果有只在前台或后台运行的自定义的任务,检查 UIApplication
对象的 applicationState
属性即可。当 App 运行到前台时,UIKit 设置该属性为 UIApplication.State.inactive
,当 App 运行到后台时,UIKit 设置该属性为 UIApplication.State.background
。
参阅
启动时间
- 为 App 执行一次性设置(Performing One-Time Setup for Your App)
- 确保 App 环境被正确配置。