UIViewController(視圖控制器)想必你們都不會陌生,開發中經常會用到。此次講講它的生命週期。html
1,視圖的生命週期swift
說是 ViewController 的生命週期,其實指的是它控制的視圖(View)的生命週期。每當視圖的狀態發生變化時,視圖控制器會自動調用一系列方法來響應變化。app
經過這些方法,咱們就能夠跟蹤到視圖的整個生命週期。各個方法按執行順序排列以下:ide
(1)init:初始化程序函數
(2)loadView:視圖初始化測試
這個方法不該該被直接調用,而是由系統自動調用。它會加載或建立一個 view 並把它賦值給 UIViewController 的 view 屬性。spa
同時重寫 loadView 方法的時候,不要調用父類的方法。code
(3)viewDidLoad:視圖加載完成,但還沒在屏幕上顯示出來orm
咱們能夠重寫這個方法,對 view 作一些其餘的初始化工做。好比能夠移除一些視圖,修改約束,加載數據等。htm
(3)viewWillAppear:在視圖即將顯示在屏幕上時調用
咱們能夠在這個方法裏,改變當前屏幕方向或狀態欄的風格等。
(4)viewDidApper:在視圖顯示在屏幕上時調用時調用
咱們能夠在這個方法中,對視圖作一些關於展現效果方面的修改。
(5)viewWillDisappear:視圖即將消失、被覆蓋或是隱藏時調用
(6)viewDidDisappear:視圖已經消失、被覆蓋或是隱藏時調用
(7)viewVillUnload:當內存太低時,須要釋放一些不須要使用的視圖時,即將釋放時調用
(8)viewDidUnload:當內存太低,釋放一些不須要的視圖時調用。
注意:自 iOS6 起,viewWillUnload 和 viewDidUnload 這兩個方法被廢除了。當系統發出內存警告的時候,會自動把 view 給清除掉,不用咱們再特別處理。
同時系統還會調用 didReceiveMemoryWarning 方法通知視圖控制器,咱們能夠在這裏面進行一些操做,來釋放一些額外的資源。(一般來講不用操做,比較最佔資源的 view 已經被系統給清理了。)
2,視圖狀態的轉換
在實際應用中,視圖一般不會按照上面列的流程一次執行下來,可能會在可見與不可見的狀態間互相轉換。好比一開始視圖是可見的,接着咱們跳轉到另外一個 ViewController,這時原來視圖就變成不可見的。後面咱們又跳轉回來,那麼這個視圖就又是可見的。
當視圖的可見性發生變化時,視圖控制器對應的方法也會隨之響應。具體可見下圖:
特別要注意的是:Appearing 和 Disappearing 這兩個狀態是能夠互相轉化的。
3,測試樣例說明
(1)ViewController 是首頁視圖控制器,咱們將裏面全部的與生命週期有關的函數都打印出來。
(2)同時 ViewController 中添加了一個「跳轉」按鈕,點擊後跳轉到另外一個視圖控制器(AnotherViewController)。
(3)AnotherViewController 裏有個「返回」按鈕,點擊又會回到前一個頁面。
4,測試代碼 (1)ViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
(2)AnotherViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
5,運行測試
咱們從 ViewController 跳到 AnotherViewController,再從 AnotherViewController 跳回 ViewController。整個控制檯打印出來的流程以下: