Skip to content

1.2 理解AppDelegate和SceneDelegate的角色

AppDelegate 的核心职责

AppDelegate 是 iOS 应用的入口点,它在应用生命周期中扮演着至关重要的角色。 🚀 它是您应用的主委托,负责处理应用级别的事件和状态变化。

  • 应用生命周期管理: 当应用启动、进入后台、返回前台或终止时,AppDelegate 会收到相应的通知。
  • 核心服务配置: 您可以在这里进行一些全局性的配置,例如设置第三方库、初始化数据库或配置推送通知服务。
  • 内存警告处理: 当系统内存不足时,AppDelegate 会收到警告,您可以在此释放不必要的资源。

在 iOS 13 之前,AppDelegate 几乎承担了所有与应用和 UI 场景相关的职责。 🤯 它的作用非常广泛,是您应用的心脏。

SceneDelegate 的崛起与职责分离

随着 iOS 13 的发布,Apple 引入了 SceneDelegate,旨在更好地支持多窗口和多场景的应用。 📱 这一改变将 UI 相关的职责从 AppDelegate 中分离出来,使得代码结构更加清晰。

  • 管理 UI 场景生命周期: SceneDelegate 负责管理单个 UI 场景的生命周期,包括场景的连接、断开、激活和非激活。
  • 配置场景的 UIWindow: 每个 SceneDelegate 实例都拥有自己的 UIWindow,您可以在其中设置根视图控制器。
  • 处理场景特定的事件: 例如,当用户在 iPad 上打开多个窗口时,每个窗口都由一个独立的 SceneDelegate 实例管理。

这种职责分离极大地提升了代码的可维护性和可扩展性,尤其对于支持多任务的应用而言。 🤩

职责划分的优势

AppDelegateSceneDelegate 的职责分开,带来了诸多显著的优势。 🌟

  • 清晰的关注点分离: AppDelegate 专注于应用级别的事件,而 SceneDelegate 则专注于 UI 场景级别的事件。
  • 更好的多场景支持: 以前,所有 UI 场景都由 AppDelegate 管理,现在每个场景都有自己的 SceneDelegate,这使得多窗口应用的管理变得更加直观和高效。
  • 提高代码可读性: 职责的明确划分使得代码更容易理解和维护。

例如,在一个支持多窗口的 iPad 应用中,每个窗口都有其独立的 SceneDelegate,这使得每个窗口都可以独立地管理其视图层级和状态。 🤯

它们如何协同工作?

尽管职责不同,AppDelegateSceneDelegate 仍然紧密协作,共同构建您的 iOS 应用。 🤝

  1. 应用启动: 当应用启动时,AppDelegate 首先被调用,处理应用级别的初始化。
  2. 场景创建: 随后,AppDelegate 会通知系统创建新的 UI 场景,并为每个场景实例化一个 SceneDelegate
  3. UI 配置: 每个 SceneDelegate 负责配置其对应的 UIWindow 和根视图控制器,从而呈现用户界面。

您可以将 AppDelegate 想象成一个总管家,负责整个应用的宏观管理,而 SceneDelegate 则是各个房间的管家,负责各自房间的细节布置。 🏡 这种分工合作确保了应用的顺畅运行。

关键方法速览

为了更好地理解它们,让我们快速浏览一些关键方法。 🔍

  • AppDelegate 中的关键方法:

    • application(_:didFinishLaunchingWithOptions:): 应用启动时调用,进行应用级别的初始化。
    • application(_:configurationForConnectingSceneSession:options:): 在 iOS 13 及更高版本中,用于配置新的场景会话。
    • applicationWillTerminate(_:): 应用即将终止时调用。
  • SceneDelegate 中的关键方法:

    • scene(_:willConnectTo:options:): 场景即将连接到会话时调用,您可以在这里设置 window 和根视图控制器。
    • sceneDidBecomeActive(_:): 场景变为活动状态时调用。
    • sceneWillResignActive(_:): 场景即将变为非活动状态时调用。

理解这些方法的作用,将帮助您更好地掌握应用和场景的生命周期。 🥳 它们是您构建强大 iOS 应用的基石!

本站使用 VitePress 制作