iOS生命週期注意事項

viewDidappear 更改xib內容app

 

1、 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

2、非ARC環境下
didReceiveMemoryWarning:
當app收到內存警告的時候會發消息給視圖控制器。
app歷來不會直接調用這個方法,而是當系統肯定可用內存不足的時候採起調用。
若是你想覆寫這個方法來釋放一些控制器使用的額外內存,你應該在你的實現方法中調用父類的實現方法。
viewWillUnload:(iOS6廢除)
當消除掉控制器的視圖以前調用
視圖不會再在低內存條件下被清除因此這個方法不會再被調用。
在iOS5以前,當低的內存狀況發生的時候,當前控制器的視圖們再也不被須要的時候,系統會有選擇性的將這些視圖從這些內存移除。這個方法被調用的目的是在視圖被真正的銷燬前你能夠執行一些清空的任務。好比,你想要使用這個方法去清空視圖的觀察者或通知或者記錄視圖的狀態以便當從新讀取的時候恢復。
在iOS6以後,再也不須要清空視圖的引用。所以,其餘一些關於清理的方法,好比清空觀察者,也不是必要的了。
viewDidUnload:(iOS6廢除)
當視圖從內存中被消除後調用
視圖在地的內存狀況下再也不被銷燬因此這個方法也再也不會調用
在iOS5以前,地的內存情況發生以後,當前的試圖控制器的視圖再也不被須要,系統會選擇性的在視圖控制器的視圖被銷燬後調用。這個方法使你執行一些最後清空任務的最後機會若是你的視圖控制器存儲着對視圖的或子控件的單獨引用,你應該使用這個方法去釋放這些引用。你也可使用這個方法去消除一些你再建立視圖時候所建立的可是當視圖再也不的時候再也不須要的關於對象的引用。你不該該使用這個方法去釋放用戶數據或者一些不能輕易被從新建立的數據。
在iOS6以後,清空在試圖控制器中對views和其餘對象的引用已經沒有必要了。
當這個方法被調用的時候,視圖的屬性是空的。

文/Mitchell(簡書做者)
原文連接:http://www.jianshu.com/p/fcfbd4919b0b
著做權歸做者全部,轉載請聯繫做者得到受權,並標註「簡書做者」。
相關文章
相關標籤/搜索