iOS - ViewController生命週期

來源:互聯網
上載者:User

標籤:

from:http://www.jianshu.com/p/fcfbd4919b0bviewcontroller的生命週期關乎著資料的儲存,view的重新整理等,very important 一、 ARC環境
  • 單個viewController的生命週期
    • initWithCoder:(NSCoder *)aDecoder:(如果使用storyboard或者xib)
    • loadView:載入view
    • viewDidLoad:view載入完畢
    • viewWillAppear:控制器的view將要顯示
    • viewWillLayoutSubviews:控制器的view將要布局子控制項
    • viewDidLayoutSubviews:控制器的view布局子控制項完成
      這期間系統可能會多次調用viewWillLayoutSubviews 、 viewDidLayoutSubviews 倆個方法
    • viewDidAppear:控制器的view完全顯示
    • viewWillDisappear:控制器的view即將消失的時候
      這期間系統也會調用viewWillLayoutSubviews 、viewDidLayoutSubviews 兩個方法
    • viewDidDisappear:控制器的view完全消失的時候
  • 多個viewControllers跳轉
    • 當我們點擊push的時候首先會載入下一個介面然後才會調用介面的消失方法
    • initWithCoder:(NSCoder *)aDecoder:ViewController2 (如果用xib建立的情況下)
    • loadView:ViewController2
    • viewDidLoad:ViewController2
    • viewWillDisappear:ViewController1 將要消失
    • viewWillAppear:ViewController2 將要出現
    • viewWillLayoutSubviews ViewController2
    • viewDidLayoutSubviews ViewController2
    • viewWillLayoutSubviews:ViewController1
    • viewDidLayoutSubviews:ViewController1
    • viewDidDisappear:ViewController1 完全消失
    • viewDidAppear:ViewController2 完全出現
  • 小結:
    -整個控制器聲明周期: viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear
二、非ARC環境下
  • didReceiveMemoryWarning:
    • 當app收到記憶體警告的時候會發訊息給視圖控制器。
    • app從來不會直接調用這個方法,而是當系統確定可用記憶體不足的時候採取調用。
    • 如果你想覆寫這個方法來釋放一些控制器使用的額外記憶體,你應該在你的實現方法中調用父類的實現方法
  • viewWillUnload:(iOS6廢除)
    • 當消除掉控制器的視圖之前調用
    • 視圖不會再在低記憶體條件下被清除所以這個方法不會再被調用。
    • 在iOS5之前,當低的記憶體情況發生的時候,當前控制器的視圖們不再被需要的時候,系統會有選擇性的將這些視圖從這些記憶體移除。這個方法被調用的目的是在視圖被真正的銷毀前你可以執行一些清空的任務。比如,你想要使用這個方法去清空視圖的觀察者或通知或者記錄視圖的狀態以便當重新讀取的時候恢複。
    • 在iOS6之後,不再需要清空視圖的引用。因此,其他一些關於清理的方法,比如清空觀察者,也不是必要的了。
  • viewDidUnload:(iOS6廢除)
    • 當視圖從記憶體中被消除後調用
    • 視圖在地的記憶體情況下不再被銷毀所以這個方法也不再會調用
    • 在iOS5之前,地的記憶體狀況發生之後,當前的試圖控制器的視圖不再被需要,系統會選擇性的在視圖控制器的視圖被銷毀後調用。這個方法使你執行一些最後清空任務的最後機會如果你的視圖控制器儲存著對視圖的或子控制項的單獨引用,你應該使用這個方法去釋放這些引用。你也可以使用這個方法去消除一些你再建立視圖時候所建立的但是當視圖不再的時候不再需要的關於對象的引用。你不應該使用這個方法去釋放使用者資料或者一些不能輕易被重新建立的資料。
    • 在iOS6之後,清空在試圖控制器中對views和其他對象的引用已經沒有必要了。
    • 當這個方法被調用的時候,視圖的屬性是空的。



文/Mitchell(簡書作者)
原文連結:http://www.jianshu.com/p/fcfbd4919b0b
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。

iOS - ViewController生命週期

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.