iOS中的UIScene和UISceneDelegate

目录

​​​​​​​前言

一、AppDelegate和SceneDelegate的关系

1.AppDelegate

2.SceneDelegate

3.info.plist配置

4.生命周期方法对比

1.应用启动

2.进入前台

3.进入后台

5.何时使用AppDelegate和SceneDelegate

1.AppDelegate

2.SceneDelegate


前言

        在iOS 13及之后的版本中,苹果引入了UISceneUISceneDelegate,将应用程序的生命周期管理分成了多个场景(Scene),使得多窗口支持成为可能。SceneDelegateAppDelegate 分别负责不同方面的应用程序生命周期和 UI 管理。

        这篇博客主要介绍UISceneDelegate以及相关API的用法。

一、AppDelegate和SceneDelegate的关系

1.AppDelegate

        1.主要用于处理应用程序级别的事件,如应用程序启动、终止、进入前台和后台等。

        2.在iOS 13之前,AppDelegate负责所有应用程序生命周期的管理

2.SceneDelegate

        1.引入于iOS 13,用于管理单个窗口或场景的生命周期。

        2.一个应用程序可以有多个SceneDelegate实例,每个实例对应一个窗口或场景

        3.主要用于处理与UI相关的生命周期事件,例如场景的创建、进入前台、进入后台等

   AppDelegate实例如下:

import UIKit@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {var window: UIWindow?// 应用程序启动时调用func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {// 初始化代码return true}// 应用程序进入后台时调用func applicationDidEnterBackground(_ application: UIApplication) {// 保存数据或释放资源}// 应用程序进入前台时调用func applicationWillEnterForeground(_ application: UIApplication) {// 恢复数据或资源}// 更多方法...
}

   SceneDelegate实例如下:

import UIKitclass SceneDelegate: UIResponder, UIWindowSceneDelegate {var window: UIWindow?// 场景连接时调用func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {guard let windowScene = (scene as? UIWindowScene) else { return }window = UIWindow(windowScene: windowScene)window?.rootViewController = ViewController()  // 设置根视图控制器window?.makeKeyAndVisible()}// 场景进入前台时调用func sceneWillEnterForeground(_ scene: UIScene) {// 恢复数据或资源}// 场景进入后台时调用func sceneDidEnterBackground(_ scene: UIScene) {// 保存数据或释放资源}// 更多方法...
}

3.info.plist配置

        要使SceneDelegate生效,需要在Info.plist中进行配置:

<key>UIApplicationSceneManifest</key>
<dict><key>UIApplicationSupportsMultipleScenes</key><true/><key>UISceneConfigurations</key><dict><key>UIWindowSceneSessionRoleApplication</key><array><dict><key>UISceneConfigurationName</key><string>Default Configuration</string><key>UISceneDelegateClassName</key><string>$(PRODUCT_MODULE_NAME).SceneDelegate</string></dict></array></dict>
</dict>

4.生命周期方法对比

1.应用启动

        AppDelegate: application(_:didFinishLaunchingWithOptions:)
       SceneDelegate: scene(_:willConnectTo:options:)

2.进入前台

        AppDelegate: applicationWillEnterForeground(_:)
          SceneDelegate: sceneWillEnterForeground(_:)

3.进入后台

        AppDelegate: applicationDidEnterBackground(_:)
        SceneDelegate: sceneDidEnterBackground(_:)

5.何时使用AppDelegate和SceneDelegate

1.AppDelegate

 - 处理应用程序级别的事件,如推送通知的注册、处理快捷方式、全局状态保存等。
  - 与应用程序生命周期无关的设置和初始化。

2.SceneDelegate

 - 处理与单个UI场景相关的事件,如窗口管理、多任务处理等。
  - 每个窗口或场景特定的UI状态管理。

通过引入`SceneDelegate`,苹果提供了更好的方式来管理iPad的多窗口支持,并且更清晰地分离了应用程序的生命周期事件和UI相关的生命周期事件。这有助于开发者更好地组织代码并支持复杂的应用程序功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux内核编程入门:深度探索与实战挑战

Linux内核编程入门&#xff1a;深度探索与实战挑战 在操作系统的心脏地带&#xff0c;Linux内核以其强大、灵活和开源的特性吸引着众多程序员。对于那些渴望深入了解系统底层机制并亲手塑造操作系统的勇士们&#xff0c;Linux内核编程无疑是一个极具挑战性和吸引力的领域。本文…

民国漫画杂志《时代漫画》第39期.PDF

时代漫画39.PDF: https://url03.ctfile.com/f/1779803-1248636473-6bd732?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

Qt for Android : 使用libusb做CH340x串口传输的底层USB库

简介 Qt for Android自带的串口方案并没有适用在高的API版本中&#xff0c; 会出现permission denied的访问问题&#xff0c; 所以就需要使用Android API&#xff0c; 也就是在CPP中使用JNI方式进行调用&#xff0c; 为了开发的方便&#xff0c; 使用libusb库作为替代的底层usb…

SpringBoot注解--10--@Bean,对象注入的三种方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Bean一、如何使用方法注解注意Bean 的命名规则&#xff0c;当没有设置 name 属性时&#xff0c;那么 bean 默认的名称就是方法名&#xff0c;当设置了 name 属性之后…

解析Java中1000个常用类:Runnable 类,你学会了吗?

在 Java 编程中,处理并发和多线程是一个重要的主题。为了简化多线程编程,Java 提供了多种工具和类,其中最基本的一个工具就是 Runnable 接口。 Runnable 接口为创建和管理线程提供了一种标准的方式。本文将详细介绍 Runnable 接口的定义、实现原理、应用场景,并通过示例展…

33【Aseprite 作图】树——拆解

1 树叶 画树叶真累啊&#xff0c;可以先画一个轮廓&#xff0c;细节一点点修 2 1 2 &#xff1b;2 2 2 &#xff08;横着横&#xff09;&#xff0c;这样一点点画树叶 填充颜色&#xff0c;用了喷雾工具 2 树干部分 轮廓部分&#xff0c;左边的是3 3 3 &#xff1b;上下都是…

网页音频提取在线工具有哪些 网页音频提取在线工具下载

别再到处去借会员账号啦。教你一招&#xff0c;无视版权和地区限制&#xff0c;直接下载网页中的音频文件。没有复杂的操作步骤&#xff0c;也不用学习任何代码。只要是网页中播放的音频文件&#xff0c;都可以把它下载到本地保存。 一、网页音频提取在线工具有哪些 市面上的…

【数据结构】二叉树:简约和复杂的交织之美

专栏引入&#xff1a; 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累…

Transformer中的位置编码PE(position encoding)

Transformer中的位置编码PE(position encoding) 1.提出背景 transformer模型的attention机制并没有包含位置信息&#xff0c;即一句话中词语在不同的位置时在transformer中是没有区别的 2.解决背景 给encoder层和decoder层的输入添加了一个额外的向量Positional Encoding&a…

平移数据c++

题目描述 将a数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置。 输入 第一行为数组a的元素个数n&#xff1b; 第二行为n个小于1000的正整数。 输出 平移后的数组元素&#xff0c;每个数用一个空格隔开。 样例输入 10 1 2 3 4 5 6 7 8 9 10 样例输出 2 3 …

【专利 超音速】一种光伏检测系统

申请号CN202410053901.0公开号&#xff08;公开&#xff09;CN118032774A申请日2024.01.12申请人&#xff08;公开&#xff09;超音速人工智能科技股份有限公司发明人&#xff08;公开&#xff09;张俊峰(总); 叶长春(总); 许春夏 摘要 本发明公开一种光伏检测系统&#xff0…

iotdb时序库在火电设备锅炉场景下的实践【原创文字,IoTDB社区可进行使用与传播】

一.概述 1.1 说明 本文章主要介绍iotdb数据库在电站锅炉工业场景下&#xff0c;对辅助智能分析与预警的使用介绍。 【原创文字&#xff0c;IoTDB社区可进行使用与传播】 1.2 项目背景 随着人工智能算法在电力领域的发展&#xff0c;以及燃煤锅炉设备精细化调整需求的增加&…

Java基础八股

Java基础八股 Java语言Java语言有什么特点Java与C区别Java如何实现跨平台JVMvsJDKvsJRE标识符和关键字的区别是什么自增自减运算符移位运算符continue,break,return的区别是什么final,finally,finalize的区别final关键字的作用时什么 变量 Java语言 Java语言有什么特点 Java是…

LED灯编程:一步步探索光的魔法

LED灯编程&#xff1a;一步步探索光的魔法 在数字时代&#xff0c;LED灯早已超越了传统的照明功能&#xff0c;成为编程与创意结合的完美载体。那么&#xff0c;LED灯怎么编程呢&#xff1f;本文将分四个方面、五个方面、六个方面和七个方面&#xff0c;带您走进LED灯编程的奇…

如何在Python中管理内存

在Python中&#xff0c;内存管理主要是由解释器自动处理的&#xff0c;这包括对象的分配和回收。Python使用引用计数和垃圾回收机制来管理内存&#xff0c;这大大简化了开发者的工作&#xff0c;因为他们通常不需要手动管理内存。 然而&#xff0c;尽管Python自动管理内存&…

数据结构——经典链表OJ(二)

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…

chatgpt之api的调用问题

1.调用api过程中&#xff0c;出现如下报错内容 先写一个测试样例 import openaiopenai.api_key "OPEN_AI_KEY" openai.api_base"OPEN_AI_BASE_URL" # 是否需要base根据自己所在地区和key情况进行completion openai.ChatCompletion.create(model"g…

【intro】GNN中异构图(heterogeneous graph)综述

本篇博客内容是读两篇论文&#xff0c;两篇论文连接如下&#xff1a; Heterogeneous graph neural networks analysis: a survey of techniques, evaluations and applications A Survey on Heterogeneous Graph Embedding: Methods, Techniques, Applications and Sources …

瓦罗兰特国际服 外服游玩教程 瓦罗兰特外服下载注册游玩指南

瓦罗兰特国际服 外服游玩教程 瓦罗兰特外服下载注册游玩指南 瓦罗兰特作为当今游戏圈顶流的一款热门FPS。游戏&#xff0c;作为拳头游戏公司划时代的一款游戏。游戏不仅延续了传统FPS游戏的玩法&#xff0c;还添加许多新玩法&#xff0c;这也是游戏可以吸引大批量玩家的原因之…

Flink面试整理-对Flink的高级特性如CEP(复杂事件处理)、状态后端选择和调优等有所了解

Apache Flink 提供了一系列高级特性,使其成为一个强大的实时数据处理框架,特别适用于复杂的数据处理场景。其中,复杂事件处理(CEP)、状态后端的选择和调优是其中重要的几个方面。 复杂事件处理(CEP) CEP 概念:CEP 是用于在数据流中识别复杂模式的技术。它允许用户指定事…