SceneDelegate有什么作用?删除有什么影响

  • Post author:
  • Post category:其他



自从Xcode11发布以来,当你使用新XCode创建一个新的iOS项目时,SceneDelegate会被默认创建,它到底有什么用呢?

在iOS 13(及以后版本)上,

SceneDelegate

将负责

AppDelegate

的某些功能。 最重要的是,window(窗口)的概念已被scene(场景)的概念所代替。 一个应用程序可以具有不止一个场景,而一个场景现在可以作为您应用程序的用户界面和内容的载体(背景)。

尤其是一个具有多场景的App的概念很有趣,因为它使您可以在iOS和iPadOS上构建多窗口应用程序。 例如,文档编辑器App中的每个文本文档都可以有自己的场景。 用户还可以创建场景的副本,同时运行一个应用程序的多个实例(类似多开)。

在Xcode 11中有三个地方可以明显地看到SceneDelegate的身影:

1、现在,一个新的iOS项目会自动创建一个SceneDelegate类,其中包括我们熟悉的生命周期事件,例如active,resign和disconnect。


SceneDelegate

还具有下面这些函数:

1)

sceneDidDisconnect(_:)

当场景与app断开连接是调用(注意,以后它可能被重新连接)

2)

sceneDidBecomeActive(_:)

当用户开始与场景进行交互(例如从应用切换器中选择场景)时,会调用

3)

sceneWillResignActive(_:)

当用户停止与场景交互(例如通过切换器切换到另一个场景)时调用

4)

sceneWillEnterForeground(_:)

当场景变成活动窗口时调用,即从后台状态变成开始或恢复状态

5)

sceneDidEnterBackground(_:)

当场景进入后台时调用,即该应用已最小化但仍存活在后台中

2、AppDelegate类中多了两个与“scene sessions”相关的新方法:

1)

application(_:configurationForConnecting:options:)

会返回一个创建场景时需要的UISceneConfiguration对象2)

application(_:didDiscardSceneSessions:)

当用户通过“应用切换器”关闭一个或多个场景时会被调用

3、Info.plist文件中提供了”Application Scene Manifest“配置项,用于配置App的场景,包括它们的场景配置名,delegate类名和storyboard

项目中

SceneDelegate

相关结构示例图

在这里插入图片描述

在这里插入图片描述


不习惯使用

SceneDelegate

可以将其删除,按原来的方式进行项目开发


删除操作:

1、

SceneDelegate

文件删除

2、

AppDelegate

文件中函数

application(_:configurationForConnecting:options:)



application(_:didDiscardSceneSessions:)

删除

3、

Info.plist

文件中

Application Scene Manifest

删除



版权声明:本文为potato512原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。