IOS內存警告處理


IPhone下每個app可用的內存是被限制的,如果一個app使用的內存超過20M,則系統會向該app發送Memory Warning消息。收到此消息后,app必須正確處理,否則可能出錯或者出現內存泄露。

app收到Memory Warning后會調用:

UIApplication::didReceiveMemoryWarning -> UIApplicationDelegate::applicationDidReceiveMemoryWarning,然后調用當前所有的viewController進行處理。因此處理的主要工作是在viewController。

我們知道,創建viewcontroller時,執行順序是loadview -> viewDidLoad。

當收到內存警告時,如果viewcontroller未顯示(在后台),會執行didReceiveMemoryWarning -> viewDidUnLoad;如果viewcontroller當前正在顯示(在前台),則只執行didReceiveMemoryWarning。

當重新顯示該viewController時,執行過viewDidUnLoad的viewcontroller(即原來在后台)會重新調用loadview -> viewDidLoad。

因此主要注意下面幾個函數:

loadView 創建view,構建界面;
viewDidLoad 做些初始化工作。由於在初次創建viewcontroller和重新恢復時都會調用,因此這個函數需要注意區分不同的情況,設置正確的狀態。
didReceiveMemoryWarning 釋放不必須的內存,比如緩存,未顯示的view等。
viewDidUnLoad 最大程度的釋放可以釋放的內存。比如應該釋放view,這些view在調用loadview后可以重新生成。(其中成員變量釋放后應設置為nil)。對於非界面的數據是否釋放,需要具體分析,可以恢復的數據可以釋放,不能恢復的數據就不要釋放。

實際中如果viewcontroller是用xib生成的界面,則需要我們做的就比較少,主要是在viewDidLoad中恢復原來的界面狀態。

如果是通過編程創建的界面,則需要做的工作就要更多些,上面4個函數中都需要進行正確處理。

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM