iOS APP生命周期 和 UIViewController的生命周期

APP生命周期

要知道APP的生命周期,首先要了解一下生命周期的5種狀態(tài),結(jié)合狀態(tài)理解生命周期的使用。

應(yīng)用的狀態(tài)包括:

  • 未運(yùn)行(Not running)
    程序沒啟動(dòng)

  • 未激活(Inactive)
    程序在前臺(tái)運(yùn)行,不過沒有接收到事件。
    一般每當(dāng)應(yīng)用要從一個(gè)狀態(tài)切換到另一個(gè)不同的狀態(tài)時(shí),中途過渡會(huì)短暫停留在此狀態(tài)。唯一在此狀態(tài)停留時(shí)間比較長的情況是:當(dāng)用戶鎖屏?xí)r,或者系統(tǒng)提示用戶去響應(yīng)某些(諸如電話來電、有未讀短信等)事件的時(shí)候。

  • 激活(Active)
    程序在前臺(tái)運(yùn)行而且接收到了事件。這也是前臺(tái)的一個(gè)正常的模式

  • 后臺(tái)(Backgroud)
    程序在后臺(tái)而且能執(zhí)行代碼,大多數(shù)程序進(jìn)入這個(gè)狀態(tài)后會(huì)在在這個(gè)狀態(tài)上停留一會(huì)。時(shí)間到之后會(huì)進(jìn)入掛起狀態(tài)(Suspended)。有的程序經(jīng)過特殊的請求后可以長期處于Backgroud狀態(tài)

  • 掛起(Suspended)
    程序在后臺(tái)不能執(zhí)行代碼。系統(tǒng)會(huì)自動(dòng)把程序變成這個(gè)狀態(tài)而且不會(huì)發(fā)出通知。當(dāng)掛起時(shí),程序還是停留在內(nèi)存中的,當(dāng)系統(tǒng)內(nèi)存低時(shí),系統(tǒng)就把掛起的程序清除掉,為前臺(tái)程序提供更多的內(nèi)存。

APP的生命周期就是UIApplicationDelegate中的回調(diào)方法,這些方法是根據(jù)狀態(tài)變化進(jìn)行響應(yīng)的地方,其中最常用的就是以下7個(gè)方法:

  • application:willFinishLaunchingWithOptions:
    在App啟動(dòng)時(shí)調(diào)用表示應(yīng)用加載進(jìn)程已經(jīng)開始,常用來處理應(yīng)用狀態(tài)的存儲(chǔ)和恢復(fù)
  • application:didFinishLaunchingWithOptions:
    表示App將從未運(yùn)行狀態(tài)進(jìn)入運(yùn)行狀態(tài),用于對App的初始化操作
  • applicationDidBecomeActive:
    當(dāng)應(yīng)用即將進(jìn)入前臺(tái)運(yùn)行時(shí)調(diào)用
  • applicationWillResignActive:
    當(dāng)應(yīng)用即將進(jìn)從前臺(tái)退出時(shí)調(diào)用
  • applicationDidEnterBackground:
    當(dāng)應(yīng)用開始在后臺(tái)運(yùn)行的時(shí)候調(diào)用
  • applicationWillEnterForeground:
    當(dāng)程序從后臺(tái)將要重新回到前臺(tái)(但是還沒變成Active狀態(tài))時(shí)候調(diào)用
  • applicationWillTerminate:
    當(dāng)前應(yīng)用即將被終止,在終止前調(diào)用的函數(shù)。通常是用來保存數(shù)據(jù)和一些退出前的清理工作。如果應(yīng)用當(dāng)前處在suspended,此方法不會(huì)被調(diào)用。 該方法最長運(yùn)行時(shí)限為5秒,過期應(yīng)用即被kill掉并且移除內(nèi)存。

以下是狀態(tài)之間的關(guān)系圖

狀態(tài)轉(zhuǎn)換圖.png

下面讓我們來做一些操作看一下生命周期調(diào)用的順序

  • 1、程序啟動(dòng):狀態(tài)由Not running -> Inactive -> Active
    willFinishLaunchingWithOptions
    didFinishLaunchingWithOptions
    applicationDidBecomeActive

  • 2、點(diǎn)擊home鍵|鎖屏:由Active -> Inactive -> Backgroud
    applicationWillResignActive
    applicationDidEnterBackground

  • 3、重新進(jìn)入前臺(tái):Backgroud -> Inactive -> Active applicationWillEnterForeground
    applicationDidBecomeActive

  • 4、在前臺(tái),雙擊home鍵,手動(dòng)殺掉APP:Active -> Inactive -> Backgroud -> end
    applicationWillResignActive
    applicationDidEnterBackground
    applicationWillTerminate

  • 當(dāng)URL到達(dá)時(shí),如果你的應(yīng)用沒在正在運(yùn)行,則會(huì)被啟動(dòng)并且移到前臺(tái)運(yùn)行以打開URL
    application:didFinishLaunchingWithOptions:
    application:openURL:sourceApplication:
    applicationDidBecomeActive

  • 當(dāng)URL到達(dá)時(shí),如果你的應(yīng)用正在background運(yùn)行或被suspended,它將會(huì)被移到前臺(tái)以打開URL
    applicationWillEnterForeground
    application:openURL:sourceApplication:
    applicationDidBecomeActive

下面給一個(gè)比較全面生命周期執(zhí)行流程圖**

生命周期執(zhí)行流程.png

UIViewController的生命周期

當(dāng)一個(gè)視圖控制器被創(chuàng)建,并在屏幕上顯示的時(shí)候。 代碼的執(zhí)行順序

1、 alloc
創(chuàng)建對象,分配空間
2、init (initWithNibName|initWithCoder)
初始化對象,初始化數(shù)據(jù)
3、awakeFromNib
所有視圖的outlet和action已經(jīng)連接,但還沒有被確定。
4、loadView
完成一些關(guān)鍵view的初始化工作,加載view。
5、viewDidLoad
載入完成,可以進(jìn)行自定義數(shù)據(jù)以及動(dòng)態(tài)創(chuàng)建其他控件
6、viewWillAppear
視圖將出現(xiàn)在屏幕之前
7、viewWillLayoutSubviews
將要對子視圖進(jìn)行調(diào)整
8、viewDidLayoutSubviews
對子視圖進(jìn)行調(diào)整完畢
9、viewDidAppear
視圖已在屏幕上渲染完成
10、viewWillDisappear
視圖將被從屏幕上移除
11、viewDidDisappear
視圖已經(jīng)被從屏幕上移除
12、dealloc
視圖被銷毀,此處需要對你在init和viewDidLoad中創(chuàng)建的對象進(jìn)行釋放
13、didReceiveMemoryWarning
內(nèi)存警告

參考資料:
http://m.itdecent.cn/p/b6efce03e628
http://m.itdecent.cn/p/ceded2035959
https://www.cnblogs.com/wodemeng/p/ios1.html

https://blog.csdn.net/huifeidexin_1/article/details/7566226
https://www.cnblogs.com/xjy-123/p/5271063.html
iOS程序執(zhí)行順序和UIViewController 的生命周期(整理)

end:小編是很認(rèn)真的寫文哦,如果小編的文對您有用,一定要點(diǎn)“喜歡”哦!如果有問題歡迎評論

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

相關(guān)閱讀更多精彩內(nèi)容

  • 所謂生命周期,其實(shí)就是指從App啟動(dòng)到關(guān)閉這一過程中所發(fā)生的一系列事件。由于iOS 4中引入了多任務(wù)功能,App能...
    山楊閱讀 934評論 0 2
  • 面對每次打開iOS應(yīng)用時(shí).都是否想到過其App運(yùn)行過程:從啟動(dòng)到按Home鍵回到主屏幕,從運(yùn)行中到按兩下Home鍵...
    Keizo閱讀 3,826評論 0 4
  • 一、iOS app 程序執(zhí)行過程 1、執(zhí)行main函數(shù)2、在此方法中調(diào)用UIApplicationMain2.1 ...
    liuyihua的技術(shù)修煉場閱讀 9,818評論 0 16
  • 在iOS10+ Swift3.0語言中,協(xié)議UIApplicationDelegate定義了iOS App的生命周...
    brycegao閱讀 1,175評論 0 3
  • 談理想就一定高尚,談現(xiàn)實(shí)就一定俗氣么? 實(shí)則不然。不立足于現(xiàn)實(shí),又怎么去談理想...現(xiàn)實(shí)很殘酷,它需要你勇敢的去面...
    小溫梓閱讀 381評論 0 2

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