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


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掉並且移除內存。

以下是狀態之間的關系圖

 
狀態轉換圖.png

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

  • 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

下面給一個比較全面生命周期執行流程圖**

 
生命周期執行流程.png

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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM