UIViewController的生命週期

視圖控制器被創建,從屏幕上顯示的時候,代碼執行順序如下

1.alloc :創建這個控制器對象,並分配空間

2. init (initWithNibName)初始化對象,初始化數據

3. LoadView :載入nib的視圖

4. viewDidLoad : 載入完成,可以在這裏用代碼動態編寫其他控件,只會在加載的時候執行一次,所以只能用來做初始化設置

5. viewWillAppear : 視圖將要出現在屏幕之前,馬上這個視圖就會展現在屏幕上的時候,一般可以在這裏設置設備在不同方向的時候該如何顯示等等.

6. viewDidAppear 視圖已經在屏幕上渲染完成的時機.有時候,由於一些特殊的原因,我們不能在viewWillApper方法裏,對視圖進行更新。那麼可以重寫這個方法,在這裏對正在顯示的視圖進行進一步的設置。

視圖從屏幕中移除,並銷燬內存的時候的執行順序正好相反:

1. viewWiiDisappear: 視圖將要從屏幕上移除的時候執行,(因爲是移除,和nib已經沒有關係,所以這裏沒有所謂的load)

2. viewDidDisappear:視圖已經從屏幕上移除,可以重寫這個方法,在視圖已經消失或者被覆蓋後執行一些操作.

3. 視圖被銷燬,這裏需要對你在init和viewDidLoad中創建的對象進行釋放,ARC不用處理

關於didReceiveMemoryWarining 和viewDidUnload:

3.0以後已經不怎麼使用didReceiveMemoryWarining,但是好像6.0又開始用,只是方式不太相同.如果發生內存警告的時候, 本視圖不是正在顯示的視圖的話,這個方法就會被執行,銷燬本視圖的所有子視圖,我個人理解:不如當前顯示了個很多層的view,有內存警告了,然後系統會自動的銷燬沒有顯示的子控件,系統在這裏只會釋放內存,不會釋放對象的所有權,個人理解爲變成了野指針,所以這裏需要開發者手動的對viewload和viewDidLoad裏的對象進行釋放.也就是把指針置爲nil

發佈了23 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章