UIScene概念不明确

UIScene concept is not clear

在我们都习惯了 AppDelegate 中的方法之前,我们创建了 UIWindow,然后为此 Window 设置了 rootViewController。有时,当我们需要自定义警报时,我们可以创建一个新的 UIWindow 将在上方。

现在Xcode自动创建UIScene并根据这个场景创建UIWindow。如果有人能详细解释如何在现实生活中使用这个场景,以及在 AppDelegate

中仅使用 UIWindow 的主要好处是什么,我将不胜感激

因为这个article解释不了太多

最重要的是场景设置了多个window支持(目前仅适用于iPadOS和macOS)。它对于 iOS.

上的 SwiftUI 设置也很有用

SceneDelegate 控制屏幕上显示的内容"to manage life-cycle events in one instance of your app's user interface.",而 AppDelegate 控制整个应用程序生命周期。

您还会注意到 keyWindow 对于 iOS 不再存在。 iOS 很可能会有多个 window 支持,但这只是目前的猜测。

希望这能澄清一些事情,并让您了解 Apple 更新实施的原因。

This article gives some more data regarding SceneDelegate that you may find useful: https://www.donnywals.com/understanding-the-ios-13-scene-delegate/

文档

您应该阅读 App and Environment Article 来自 Apple 而不是 UIScene 文档。


说明

关于 scenes:

Scene, Manage multiple instances of your app’s UI simultaneously, and direct resources to the appropriate instance of your UI.

我们在 iOS 13 之前只有一个场景,所以我们唯一需要同时 运行 ViewControllers 的是多个 Windows彼此。但是现在,每个应用程序可以同时拥有多个实例 运行ning! 每个场景都有自己的状态,它可能在前台,而其他场景在后台或暂停,而Window完全取决于应用程序本身。

假设我们有 2 个视图控制器(考虑没有场景)运行在设备的左侧和右侧,然后我们需要显示横幅。使用旧的 window 方法将在两者上显示横幅!如果你需要选择一个,你可能最终会找到正确的控制器并在上面展示横幅,(我想我们所有人在熟悉之前都做过这个方法UIWindow

因此 apple 引入了 Scene,一个用于应用程序每个单独实例的容器。因此,您可以单独管理每个应用程序,并且每个应用程序都像一个单独的应用程序。它有自己的 windowcontroller。但是所有这些都由一个对象 UIApplication.shared 管理,它有一个 delegate 来处理一般事件(通常来自应用程序外部)和整个应用程序生命周期。