在iOS13之后,我们在创建新的项目工程时候,会发现会出现两个代理,分别是:AppDelegate 和 SceneDelegate ,而AppDelegate 中的 window属性 也被放到了SceneDelegate中,所以iOS13中appdelegate的职责发现了改变:(使用场景的情况下)
iOS13之前,Appdelegate的职责全权处理App生命周期和UI生命周期;
iOS13之后,Appdelegate的职责是:
1、处理 App 生命周期
2、新的 Scene Session 生命周期
那UI的生命周期呢?交给新增的Scene Delegate处理
上图为iOS13之前的生命周期
但是iOS13之后,Appdelegate不在负责UI生命周期,所有UI生命周期交给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 之后
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:]
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
iOS中的生命周期简单的介绍就到这里,如果有什么不对或者需要补充的地方,希望大家不要吝啬,我们一起进步 ⛽️