赞
踩
打开你 app 的 main.m 文件,可以看到
// UIApplicationMain主要负责了:从给定的类名初始化应用程序对象、从给定的应用程序委托类,初始化一个应用程序委托、启动主事件循环,并开始接收事件
// 第三个参数 principalClassName -- UIApplication 或 UIApplication 子类,nil 默认为 UIApplication
// 第四个参数 delegateClassName -- AppDelagate 类名
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
从代码可以看出,AppDelegate 就是一个 App 的入口,有点像 vue 的 App.vue。
苹果的官方文档都建议应该由AppDelegate来处理这些工作:
虽然官方建议将上述操作放在 AppDelegate 来处理,但是一个业务逻辑稍复杂点的项目,上述6点的所有功能的代码直接一股脑塞到一个文件里,会比较臃肿,可能会将其拆开。
在iOS 13(及以后版本)上,SceneDelegate将负责AppDelegate的某些功能。 最重要的是,window(窗口)的概念已被scene(场景)的概念所代替。 一个应用程序可以具有不止一个场景,而一个场景现在可以作为您应用程序的用户界面和内容的载体(背景)。
尤其是一个具有多场景的App的概念很有趣,因为它使您可以在iOS和iPadOS上构建多窗口应用程序。 例如,文档编辑器App中的每个文本文档都可以有自己的场景。 用户还可以创建场景的副本,同时运行一个应用程序的多个实例(类似多开)。
func application(_:willFinishLaunchingWithOptions:) func application(_:didFinishLaunchingWithOptions:) // app初始化 func applicationDidBecomeActive(UIApplication) // app已经被激活 func applicationWillResignActive(UIApplication) // app即将被挂起 func applicationDidEnterBackground(UIApplication) // app已经进入后台 func applicationWillEnterForeground(UIApplication) // app即将回到前台 func applicationWillTerminate(UIApplication) // app即将被杀死
scene:(UIScene *)scene willConnectToSession // 初始化 sceneDidBecomeActive:(UIScene *)scene // 已经被激活 sceneWillResignActive:(UIScene *)scene // 即将被挂起 sceneDidEnterBackground:(UIScene *)scene // 已经进入后台 sceneWillEnterForeground:(UIScene *)scene // 即将回到前台 sceneDidDisconnect:(UIScene *)scene // 即将被杀死
1、iOS13之前,appDelegate的职责全权处理App生命周期和UI生命周期
2、iOS13之后,appDelegate的职责是处理App生命周期和新的SceneSession生命周期。
3、所有UI生命周期交给SceneDelegate处理,appDelegate不在负责UI生命周期。
https://www.cnblogs.com/Jamwong/p/12347288.html
https://blog.csdn.net/nupt_zhai/article/details/106409586
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。