在iOS13之后,我们在创建新的项目工程时候,会发现会出现两个代理,分别是:AppDelegate 和 SceneDelegate ,而AppDelegate 中的 window属性 也被放到了SceneDelegate中,所以iOS13中appdelegate的职责发现了改变:(使用场景的情况下)
iOS13之前,Appdelegate的职责全权处理App生命周期和UI生命周期;
iOS13之后,Appdelegate的职责是:
1、处理 App 生命周期
2、新的 Scene Session 生命周期
那UI的生命周期呢?交给新增的Scene Delegate处理iOS13之前
上图为iOS13之前的生命周期
但是iOS13之后,Appdelegate不在负责UI生命周期,所有UI生命周期交给SceneDelegate处理:
iOS13 SceneDelegate处理界面的生命周期
如果不需要用到SceneDelegate,可以直接在AppDelegate里创建window,在didFinishLaunchingWithOptions里创建启动控制器、注释掉下面的两个与scene有关的代理方法,SceneDelegate可以删除,也可以不管他,info.plist文件中删除Application Scene Manifest选项,做完以上操作,就可以和之前一样了。
具体的生命周期介绍
1. APP的生命周期
iOS13 之前
1.点击应用程序图标 2.程序入口:进入Main函数 3.通过UIApplicationMain函数 4.初始化UIApplication对象并且设置代理对象AppDelegate 5.程序完成加载:[AppDelegate application:didFinishLaunchingWithOptions:] 6.创建Window窗口:UIWindow 7.程序被激活:[AppDelegate applicationDidBecomeActive:] 8.点击Home键 (1)程序取消激活状态:[AppDelegate applicationWillResignActive:] (2)程序进入后台:[AppDelegate applicationDidEnterBackground:] 9.点击应用图标 (1)程序进入前台:[AppDelegate applicationWillEnterForeground:] (2)程序被激活:[AppDelegate applicationDidBecomeActive:] 10.内存警告:[AppDelegate applicationDidReceiveMemoryWarning] 11.将要终止:[AppDelegate applicationWillTerminate]
iOS13 之前的生命周期
iOS13 之前的生命周期
iOS13 之后
1. 点击应用程序图标 2. 程序入口:进入Main函数 3. 通过UIApplicationMain函数 4. 初始化UIApplication对象并且设置代理对象AppDelegate 5. 程序完成加载:[AppDelegate application:didFinishLaunchingWithOptions:] 6. 进入场景对象调用:[SceneDelegate scene:willConnectToSession:options:]方法 7. 程序将要进入场景:[SceneDelegate sceneWillEnterForeground:] 8. 场景已经激活:[SceneDelegate sceneDidBecomeActive:] 9. 点击Home键: (1)取消场景激活状态:[SceneDelegate sceneWillResignActive:] (2)程序进入后台:[SceneDelegate sceneDidEnterBackground:] 10. 点击图标 (1)程序将要进入前台:[SceneDelegate sceneWillEnterForeground:] (2)程序已经被激活:[SceneDelegate sceneDidBecomeActive:] 11. 进入程序选择界面:[SceneDelegate sceneWillResignActive:] 11. 程序被杀死:[SceneDelegate sceneDidDisconnect:]
iOS13 之后的生命周期
2. 控制器 - UIViewController的生命周期
Xib或者普通.h.m: 1-1 initWithNibName:bundle:------初始化(xib和纯代码),初始化控制器,可以写数据初始化操作,不要写View相关操作StoryBoard: 1-2 init StoryBoard 1-1 initWithCoder:------初始化,不会直接初始化控制器 1-2 awakeFromNib------xib加载完成(xib),一些实例化加载写在此处 2.loadView------加载视图,默认从nib,如果nib为空则会创建一个空视图(重写时,不要写super) 3.viewDidLoad------视图已经加载完成(自带的View加载完成),用于初始化数据、设定、约束、移除视图等操作 4.viewWillAppear:------视图将要出现,用于设置设备不同方向时如何显示,状态栏方向,视图显示样式 5.viewWillLayoutSubviews------view将要布局子视图 6.viewDidLayoutSubviews------view已经布局子视图 7.viewDidAppear:------视图已经显示 8.viewWillDisappear:------视图将要消失 9.viewDidDisappear:------视图已经消失 10.didReceiveMemoryWarning------控制器出现内存警告 11.dealloc------视图被销毁,系统只会释放内存,不会释放对象的所有权,所以通常在这里置为nil
3. UIView的生命周期
(纯代码)UIView创建为:[[UIView alloc] init]; 1.initWithFrame: 2.init 3.layoutSubviews (纯代码)UIView创建为:[[UiView alloc] initWithFrame:[UIScreen mainScreen].bounds]; 1.initWithFrame: 2.layoutSubviews (XIB)UIView创建为:NSArray *arr = [[NSBundle mainBundle] loadNibNamed:(@"XHView") owner:nil option:nil]; [arr lastObject]; 1.initWithCoder: 2.awakeFromNib 3.layoutSubviews
ios13中的生命周期
最新推荐文章于 2023-10-28 00:31:22 发布