iOS - ios13中的生命周期

在iOS13之后,我們在創(chuàng)建新的項目工程時候,會發(fā)現(xiàn)會出現(xiàn)兩個代理,分別是:AppDelegate 和 SceneDelegate ,而AppDelegate 中的 window屬性 也被放到了SceneDelegate中,所以iOS13中appdelegate的職責(zé)發(fā)現(xiàn)了改變:(使用場景的情況下)
iOS13之前,Appdelegate的職責(zé)全權(quán)處理App生命周期和UI生命周期;
iOS13之后,Appdelegate的職責(zé)是:
1、處理 App 生命周期
2、新的 Scene Session 生命周期
那UI的生命周期呢?交給新增的Scene Delegate處理

iOS13之前

上圖為iOS13之前的生命周期

但是iOS13之后,Appdelegate不在負(fù)責(zé)UI生命周期,所有UI生命周期交給SceneDelegate處理:
iOS13 SceneDelegate處理界面的生命周期

如果不需要用到SceneDelegate,可以直接在AppDelegate里創(chuàng)建window,在didFinishLaunchingWithOptions里創(chuàng)建啟動控制器、注釋掉下面的兩個與scene有關(guān)的代理方法,SceneDelegate可以刪除,也可以不管他,info.plist文件中刪除Application Scene Manifest選項,做完以上操作,就可以和之前一樣了。

具體的生命周期介紹

1. APP的生命周期

iOS13 之前

1.點擊應(yīng)用程序圖標(biāo)
2.程序入口:進(jìn)入Main函數(shù)
3.通過UIApplicationMain函數(shù)
4.初始化UIApplication對象并且設(shè)置代理對象AppDelegate
5.程序完成加載:[AppDelegate application:didFinishLaunchingWithOptions:]
6.創(chuàng)建Window窗口:UIWindow
7.程序被激活:[AppDelegate applicationDidBecomeActive:]
8.點擊Home鍵
  (1)程序取消激活狀態(tài):[AppDelegate applicationWillResignActive:]
  (2)程序進(jìn)入后臺:[AppDelegate applicationDidEnterBackground:]
9.點擊應(yīng)用圖標(biāo)
  (1)程序進(jìn)入前臺:[AppDelegate applicationWillEnterForeground:]
  (2)程序被激活:[AppDelegate applicationDidBecomeActive:]
10.內(nèi)存警告:[AppDelegate applicationDidReceiveMemoryWarning]
11.將要終止:[AppDelegate applicationWillTerminate]
iOS13 之前的生命周期
iOS13 之前的生命周期

iOS13 之后

1. 點擊應(yīng)用程序圖標(biāo)
2. 程序入口:進(jìn)入Main函數(shù)
3. 通過UIApplicationMain函數(shù)
4. 初始化UIApplication對象并且設(shè)置代理對象AppDelegate
5. 程序完成加載:[AppDelegate application:didFinishLaunchingWithOptions:]
6. 進(jìn)入場景對象調(diào)用:[SceneDelegate scene:willConnectToSession:options:]方法
7. 程序?qū)⒁M(jìn)入場景:[SceneDelegate sceneWillEnterForeground:]
8. 場景已經(jīng)激活:[SceneDelegate sceneDidBecomeActive:]
9. 點擊Home鍵:
  (1)取消場景激活狀態(tài):[SceneDelegate sceneWillResignActive:]
  (2)程序進(jìn)入后臺:[SceneDelegate sceneDidEnterBackground:]
10. 點擊圖標(biāo)
  (1)程序?qū)⒁M(jìn)入前臺:[SceneDelegate sceneWillEnterForeground:]
  (2)程序已經(jīng)被激活:[SceneDelegate sceneDidBecomeActive:]
11. 進(jìn)入程序選擇界面:[SceneDelegate sceneWillResignActive:]
11. 程序被殺死:[SceneDelegate sceneDidDisconnect:]
iOS13 之后的生命周期

2. 控制器 - UIViewController的生命周期

Xib或者普通.h.m:
1-1 initWithNibName:bundle:------初始化(xib和純代碼),初始化控制器,可以寫數(shù)據(jù)初始化操作,不要寫View相關(guān)操作StoryBoard:
1-2 init
StoryBoard
1-1 initWithCoder:------初始化,不會直接初始化控制器
1-2 awakeFromNib------xib加載完成(xib),一些實例化加載寫在此處

2.loadView------加載視圖,默認(rèn)從nib,如果nib為空則會創(chuàng)建一個空視圖(重寫時,不要寫super)
3.viewDidLoad------視圖已經(jīng)加載完成(自帶的View加載完成),用于初始化數(shù)據(jù)、設(shè)定、約束、移除視圖等操作
4.viewWillAppear:------視圖將要出現(xiàn),用于設(shè)置設(shè)備不同方向時如何顯示,狀態(tài)欄方向,視圖顯示樣式
5.viewWillLayoutSubviews------view將要布局子視圖
6.viewDidLayoutSubviews------view已經(jīng)布局子視圖
7.viewDidAppear:------視圖已經(jīng)顯示
8.viewWillDisappear:------視圖將要消失
9.viewDidDisappear:------視圖已經(jīng)消失
10.didReceiveMemoryWarning------控制器出現(xiàn)內(nèi)存警告
11.dealloc------視圖被銷毀,系統(tǒng)只會釋放內(nèi)存,不會釋放對象的所有權(quán),所以通常在這里置為nil

3. UIView的生命周期

(純代碼)UIView創(chuàng)建為:[[UIView alloc] init];
1.initWithFrame:
2.init
3.layoutSubviews

(純代碼)UIView創(chuàng)建為:[[UiView alloc] initWithFrame:[UIScreen mainScreen].bounds];
1.initWithFrame:
2.layoutSubviews

(XIB)UIView創(chuàng)建為:NSArray *arr = [[NSBundle mainBundle] loadNibNamed:(@"XHView") owner:nil option:nil];     [arr lastObject];
1.initWithCoder:
2.awakeFromNib
3.layoutSubviews

iOS中的生命周期簡單的介紹就到這里,如果有什么不對或者需要補(bǔ)充的地方,希望大家不要吝嗇,我們一起進(jìn)步 ??

參考內(nèi)容:
iOS程序執(zhí)行順序和UIViewController 的生命周期(整理)
iOS13生命周期的改動

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容