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)系圖

下面讓我們來做一些操作看一下生命周期調(diào)用的順序
1、程序啟動(dòng):狀態(tài)由Not running -> Inactive -> Active
willFinishLaunchingWithOptions
didFinishLaunchingWithOptions
applicationDidBecomeActive2、點(diǎn)擊home鍵|鎖屏:由Active -> Inactive -> Backgroud
applicationWillResignActive
applicationDidEnterBackground3、重新進(jìn)入前臺(tái):Backgroud -> Inactive -> Active applicationWillEnterForeground
applicationDidBecomeActive4、在前臺(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í)行流程圖**

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)“喜歡”哦!如果有問題歡迎評論