理解 iOS 开发中的 SceneDelegate
随着 iOS 13 的推出,Apple 通过引入 SceneDelegate
对应用生命周期架构做出了重大更改。这个新组件管理应用 UI 的一个实例的生命周期和 UI,允许有更大的灵活性,尤其是在支持 iPadOS 上的多个窗口方面。
什么是 SceneDelegate?
SceneDelegate
负责管理 iOS 中所谓的“场景”。场景表示应用用户界面一个实例。用更简单的话来说,您可以将场景看作用户交互的一个“窗口”或视图。例如,在 iPadOS 上,用户可以打开同一应用的多个实例,每个实例都由自己的场景管理。
SceneDelegate 的作用
SceneDelegate
处理场景内的特定生命周期事件。这包括:
- 设置和关闭场景的 UI。
- 对场景生命周期中的更改做出响应,例如当场景变为活动,切换到后台或关闭时。
- 管理特定场景的任务,如处理 URL 会话、用户活动或外部显示连接。
SceneDelegate 中的关键方法
以下是在 SceneDelegate 中实现的一些关键方法:
scene(_:willConnectTo:options:)
当创建新的场景会话并与你的应用关联时,会调用此方法。通常在这里设置初始视图控制器并将其附加到提供的 UIWindow
。
|
|
sceneDidDisconnect(_:)
当场景断开连接且不再用于显示应用的UI时调用。
|
|
sceneDidBecomeActive(_:)
当场景从非活动状态移动到活动状态时调用,表明它现在在前台运行并接收事件。
|
|
sceneWillResignActive(_:)
当场景即将从活跃状态移动到非活跃状态时调用。
|
|
sceneWillEnterForeground(_:)
当场景从后台过渡到前台时调用。
|
|
sceneDidEnterBackground(_:)
当场景移动到后台时调用。使用此方法来保存数据,释放共享资源,并存储足够的场景特定状态信息以恢复场景回到当前状态。
|
|
SceneDelegate 与 AppDelegate:了解差异
SceneDelegate
处理 UI 和场景生命周期,AppDelegate
管理应用程序级事件,例如响应推送通知、确定应用是否可以旋转和初始化应用程序。在支持多个场景的应用程序中,AppDelegate
负责管理所有场景使用的共享资源。
它们有不同的职责范围:
功能 | SceneDelegate | AppDelegate |
---|---|---|
职责 | 管理各个场景的生命周期 | 管理应用程序的整体状态和配置 |
生命周期 | 与每个场景的生命周期相关 | 与整个应用程序的生命周期相关 |
用途 | 通常用于多窗口或多场景应用 | 通常用于单窗口应用 |
结论
SceneDelegate
通过将 UI 生命周期与应用生命周期分离,改进了 iOS 应用处理多显示器和多任务的方式。这种模块化方法不仅简化了应用开发的某些方面,还为应用架构开辟了新的可能性,尤其是对于复杂应用和针对 iPadOS 的应用。对于希望充分利用 iOS 13 及更高版本功能的 iOS 开发者来说,理解并有效使用 SceneDelegate
是至关重要的。