AppDelegate 是iOS应用的代理类,全名是 UIApplicationDelegate 协议的实现类,用于响应整个App的生命周期事件。简单来说:
负责整个 App在程序启动、进入后台、接收通知、打开 URL 等关键时刻负责做“响应处理”。
主要功能
当启动一个 iOS App 时,系统会首先启动 UIApplication 实例,然后会把 AppDelegate 设置成它的代理(delegate),由它来接管系统发来的生命周期回调事件。
主要功能包括:
1、App 启动:使用application(_:didFinishLaunchingWithOptions:),负责初始化逻辑、配置 SDK、设置 UI 等。
2、App 即将进入前台:使用applicationWillEnterForeground,负责准备 UI 更新。
3、App 成为活跃状态:使用applicationDidBecomeActive,负责恢复动画、计时器。
4、App 进入后台:使用applicationDidEnterBackground,负责保存数据、释放资源。
5、App 即将终止:使用applicationWillTerminate,负责做最终清理。
常见代码结构
如果创建UIKit项目的模版,可以看到如下结构:
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
print("App 启动完成")
return true
}
func applicationDidEnterBackground(_ application: UIApplication) {
print("App 进入后台")
}
func applicationWillEnterForeground(_ application: UIApplication) {
print("App 即将进入前台")
}
}
这个类会在 UIApplicationMain() 调用时由系统自动创建并挂载。
SwiftUI和AppDelegate
SwiftUI中还可以使用AppDelegate,但不是默认入口。
SwiftUI 中,通过 @main struct MyApp: App 来启动 App,而不是 AppDelegate,但仍然可以添加 AppDelegate 来处理系统事件:
@main
struct MyApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
这会让 SwiftUI 应用使用自定义的 AppDelegate,非常适合处理:
1、推送通知。
2、URL Scheme。
3、生命周期回调。
4、第三方 SDK 初始化。
使用场景
1、第三方 SDK 初始化:如 Firebase、Umeng、Bugly 等 SDK 初始化通常放在启动中处理。
2、通知处理:注册远程通知、处理 deviceToken、处理推送内容。
3、应用启动逻辑:判断是否是首次启动,是否跳转登录页等。
4、URL 跳转处理:支持通过 URL 打开 App。
5、后台任务管理:处理 App 被挂起前的数据保存等。
iOS 13之后的变化
iOS 13 引入了 UIScene 多窗口架构,将 UI 生命周期(如窗口、视图控制器的创建)拆分到了 SceneDelegate 中。
AppDelegate 管理全局事件(通知、后台、启动等)
SceneDelegate 管理每个窗口的 UI 生命周期
例如:
func scene(
_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions
)
这就是 SceneDelegate 创建 UI 的地方。
总结
AppDelegate 是 iOS 应用生命周期的核心响应器,是 UIApplication 的代理,专门负责接收和处理 App 层级的系统事件。在 UIKit 和 SwiftUI 中都可以使用,是任何正式 App 开发不可缺少的核心组件。
相关文章
1、iOS UIApplication类:https://fangjunyu.com/2025/05/20/ios-uiapplication%e7%b1%bb/
2、SwiftUI和iOS核心类UIViewController:https://fangjunyu.com/2025/05/19/swiftui%e5%92%8cios%e6%a0%b8%e5%bf%83%e7%b1%bbuiviewcontroller/