APP生命周期
要知道APP的生命周期,首先要了解一下生命周期的5種狀態,結合狀態理解生命周期的使用。
應用的狀態包括:
-
未運行(Not running)
程序沒啟動 -
未激活(Inactive)
程序在前台運行,不過沒有接收到事件。
一般每當應用要從一個狀態切換到另一個不同的狀態時,中途過渡會短暫停留在此狀態。唯一在此狀態停留時間比較長的情況是:當用戶鎖屏時,或者系統提示用戶去響應某些(諸如電話來電、有未讀短信等)事件的時候。 -
激活(Active)
程序在前台運行而且接收到了事件。這也是前台的一個正常的模式 -
后台(Backgroud)
程序在后台而且能執行代碼,大多數程序進入這個狀態后會在在這個狀態上停留一會。時間到之后會進入掛起狀態(Suspended)。有的程序經過特殊的請求后可以長期處於Backgroud狀態 -
掛起(Suspended)
程序在后台不能執行代碼。系統會自動把程序變成這個狀態而且不會發出通知。當掛起時,程序還是停留在內存中的,當系統內存低時,系統就把掛起的程序清除掉,為前台程序提供更多的內存。
APP的生命周期就是UIApplicationDelegate中的回調方法,這些方法是根據狀態變化進行響應的地方,其中最常用的就是以下7個方法:
- application:willFinishLaunchingWithOptions:
在App啟動時調用表示應用加載進程已經開始,常用來處理應用狀態的存儲和恢復 - application:didFinishLaunchingWithOptions:
表示App將從未運行狀態進入運行狀態,用於對App的初始化操作 - applicationDidBecomeActive:
當應用即將進入前台運行時調用 - applicationWillResignActive:
當應用即將進從前台退出時調用 - applicationDidEnterBackground:
當應用開始在后台運行的時候調用 - applicationWillEnterForeground:
當程序從后台將要重新回到前台(但是還沒變成Active狀態)時候調用 - applicationWillTerminate:
當前應用即將被終止,在終止前調用的函數。通常是用來保存數據和一些退出前的清理工作。如果應用當前處在suspended,此方法不會被調用。 該方法最長運行時限為5秒,過期應用即被kill掉並且移除內存。
以下是狀態之間的關系圖

下面讓我們來做一些操作看一下生命周期調用的順序
-
1、程序啟動:狀態由Not running -> Inactive -> Active
willFinishLaunchingWithOptions
didFinishLaunchingWithOptions
applicationDidBecomeActive -
2、點擊home鍵|鎖屏:由Active -> Inactive -> Backgroud
applicationWillResignActive
applicationDidEnterBackground -
3、重新進入前台:Backgroud -> Inactive -> Active applicationWillEnterForeground
applicationDidBecomeActive -
4、在前台,雙擊home鍵,手動殺掉APP:Active -> Inactive -> Backgroud -> end
applicationWillResignActive
applicationDidEnterBackground
applicationWillTerminate -
當URL到達時,如果你的應用沒在正在運行,則會被啟動並且移到前台運行以打開URL
application:didFinishLaunchingWithOptions:
application:openURL:sourceApplication:
applicationDidBecomeActive -
當URL到達時,如果你的應用正在background運行或被suspended,它將會被移到前台以打開URL
applicationWillEnterForeground
application:openURL:sourceApplication:
applicationDidBecomeActive
下面給一個比較全面生命周期執行流程圖**

UIViewController的生命周期
當一個視圖控制器被創建,並在屏幕上顯示的時候。 代碼的執行順序
1、 alloc
創建對象,分配空間
2、init (initWithNibName|initWithCoder)
初始化對象,初始化數據
3、awakeFromNib
所有視圖的outlet和action已經連接,但還沒有被確定。
4、loadView
完成一些關鍵view的初始化工作,加載view。
5、viewDidLoad
載入完成,可以進行自定義數據以及動態創建其他控件
6、viewWillAppear
視圖將出現在屏幕之前
7、viewWillLayoutSubviews
將要對子視圖進行調整
8、viewDidLayoutSubviews
對子視圖進行調整完畢
9、viewDidAppear
視圖已在屏幕上渲染完成
10、viewWillDisappear
視圖將被從屏幕上移除
11、viewDidDisappear
視圖已經被從屏幕上移除
12、dealloc
視圖被銷毀,此處需要對你在init和viewDidLoad中創建的對象進行釋放
13、didReceiveMemoryWarning
內存警告
參考資料:
https://www.jianshu.com/p/b6efce03e628
https://www.jianshu.com/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程序執行順序和UIViewController 的生命周期(整理)
end:小編是很認真的寫文哦,如果小編的文對您有用,一定要點“喜歡”哦!如果有問題歡迎評論
作者:滾滾貓
鏈接:https://www.jianshu.com/p/1f6820a7d3fd
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。