UIScene 是 iOS 13 引入的一个类,是 Apple 用来支持多窗口(Multi-Window)机制的核心概念。
UIScene定义
class UIScene : UIResponder
UIScene 表示 App 的一个运行环境实例(Scene)。
每个 scene 代表一块“独立”的用户界面(可以对应一个 UIWindow 和一个 UIViewController 层级)。
iPad 上支持多窗口时,每一个窗口就是一个 UIScene。
UIScene历史
在 iOS 13 之前,App 永远只有一个 UIWindow,由 AppDelegate 管理。
从 iOS 13 开始,为了支持:
1、iPad 多窗口(一个 App 多个独立实例)
2、拓展场景(如 CarPlay、外接显示器)
苹果引入了 Scene-based 生命周期,把每一个“UI 实例”封装成了 UIScene。
常见子类
1、UIWindowScene:最常见,用于在 iPhone/iPad 上展示窗口内容。
2、CPTemplateApplicationScene:CarPlay 场景(少见)。
3、WKScene(私有):Apple Watch 场景。
4、UIScene 本身:是抽象基类,一般不直接用。
UIScene 和 UIApplication 的关系
UIApplication 代表整个 App 的生命周期(全局维度);
UIScene 是 App 中的某一个“窗口实例”的生命周期(局部 UI 实例);
一个 App 可以有多个 scene,每个 scene 有自己的生命周期、UI 树。
结构图关系

UIScene与UIWindowScene、UIWindow的关联
1、UIScene:在 iPad 的多窗口系统中(从 iOS 13 开始):
每一个用户可以操作的独立窗口(哪怕是同一个 App 的多个窗口):
1)都是一个 UIScene。
2)更具体来说,是一个 UIWindowScene。
2、UIWindowScene:提供环境上下文,包括:
1) 当前窗口的尺寸(尤其在分屏时)。
2)方向、屏幕连接、键盘场景等信息。
3)与 UISceneDelegate 联动处理生命周期。
它并不负责 UI 展示,而是负责:这个窗口所处的环境信息(“scene context”)。
3、UIWindow:将视图(UIView)显示在屏幕上的容器。
一个 UIWindowScene 包含一个或多个 UIWindow,但绝大多数情况下只用一个 UIWindow。
生命周期变化
原来(iOS 12 及以下):
App 只有一个入口 AppDelegate。
所有 UI 通过 window 展示。
App 的生命周期统一由 UIApplicationDelegate 控制。
新的 Scene 架构(iOS 13+):
App 有多个 UIScene 实例。
每个 Scene 管理自己的 UI 生命周期。
引入了 SceneDelegate 处理每个窗口的生命周期。
Scene 生命周期相关代理方法(SceneDelegate)
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
func sceneDidDisconnect(_ scene: UIScene)
func sceneDidBecomeActive(_ scene: UIScene)
func sceneWillResignActive(_ scene: UIScene)
func sceneWillEnterForeground(_ scene: UIScene)
func sceneDidEnterBackground(_ scene: UIScene)
这些类似于以前 AppDelegate 的生命周期方法,但是作用于单个 Scene。
总结
UIScene 是 iOS 多窗口系统中,表示“某一个独立用户界面实例”的对象,它使得 App 能支持多个界面实例(特别是在 iPad 上)。
相关文章
1、iOS App生命周期管理:https://fangjunyu.com/2025/05/20/ios-app%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f%e7%ae%a1%e7%90%86/
2、iOS UIApplication类:https://fangjunyu.com/2025/05/20/ios-uiapplication%e7%b1%bb/
3、iOS窗口容器UIWindow:https://fangjunyu.com/2025/05/20/ios%e7%aa%97%e5%8f%a3%e5%ae%b9%e5%99%a8uiwindow/