天天看點

iOS UIViewController 對記憶體警告的處理經驗

原文連結:http://www.devdiv.com/iOS_iPhone-iOS_UIViewController_%E5%AF%B9%E5%86%85%E5%AD%98%E8%AD%A6%E5%91%8A%E7%9A%84%E5%A4%84%E7%90%86%E7%BB%8F%E9%AA%8C-thread-59956-1-1.html

自從iPhone4 支援多任務後,我們需要更加仔細處理記憶體不足的情形。如果使用者運作我們程式的時候,背景還跑着N個軟體,那前台運作的iphone 程式就很容易收到記憶體不足的警告。

        通常情況下,iOS在記憶體不足時會給使用者一次處理記憶體資源的機會。當我們的程式在第一次收到記憶體不足警告時,應該釋放一些不用的資源,以節省部分記憶體。否則,當記憶體不足情形依然存在,iOS再次向我們程式發出記憶體不足的警告時,我們的程式将會被iOS kill掉。

        iOS的UIViewController 類給我們提供了處理記憶體不足的接口。在iOS 3.0 之前,當系統的記憶體不足時,UIViewController的didReceiveMemoryWarining 方法會被調用,我們可以在didReceiveMemoryWarining 方法裡釋放掉部分暫時不用的資源。

        從iOS3.0 開始,UIViewController增加了viewDidUnload方法。該方法和viewDIdLoad相配對。當系統記憶體不足時,首先UIViewController的didReceiveMemoryWarining 方法會被調用,而didReceiveMemoryWarining 會判斷目前ViewController的view是否顯示在window上,如果沒有顯示在window上,則didReceiveMemoryWarining 會自動将viewcontroller 的view以及其所有子view全部銷毀,然後調用viewcontroller的viewdidunload方法。如果目前UIViewController的view顯示在window上,則不銷毀該viewcontroller的view,當然,viewDidunload也不會被調用了。