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

自从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删除

你可能感兴趣的:(iOS,开发问题集,scenedelegate,ios,objective-c,swift)