正确处理 Memory Warning

 

IPhone下每一个app可用的内存是被限制的,若是一个app使用的内存超过20M,则系统会向该app发送Memory Warning消息。收到此消息后,app必须正确处理,不然可能出错或者出现内存泄露。 编程

app收到Memory Warning后会调用: 缓存

UIApplication::didReceiveMemoryWarning -> UIApplicationDelegate::applicationDidReceiveMemoryWarning,而后调用当前全部的viewController进行处理。所以处理的主要工做是在viewController。 app

咱们知道,建立viewcontroller时,执行顺序是loadview -> viewDidLoad。 函数

当收到内存警告时,若是viewcontroller未显示(在后台),会执行didReceiveMemoryWarning -> viewDidUnLoad;若是viewcontroller当前正在显示(在前台),则只执行didReceiveMemoryWarning。 post

当从新显示该viewController时,执行过viewDidUnLoad的viewcontroller(即原来在后台)会从新调用loadview -> viewDidLoad。 spa

所以主要注意下面几个函数: 内存

loadView 建立view,构建界面;
viewDidLoad 作些初始化工做。因为在初次建立viewcontroller和从新恢复时都会调用,所以这个函数须要注意区分不一样的状况,设置正确的状态。
didReceiveMemoryWarning 释放没必要须的内存,好比缓存,未显示的view等。
viewDidUnLoad 最大程度的释放能够释放的内存。好比应该释放view,这些view在调用loadview后能够从新生成。(其中成员变量释放后应设置为nil)。对于非界面的数据是否释放,须要具体分析,能够恢复的数据能够释放,不能恢复的数据就不要释放。

实际中若是viewcontroller是用xib生成的界面,则须要咱们作的就比较少,主要是在viewDidLoad中恢复原来的界面状态。 ci

若是是经过编程建立的界面,则须要作的工做就要更多些,上面4个函数中都须要进行正确处理。 io

相关文章
相关标签/搜索