这里有一篇文章。非常具体地说明了ios6前后是怎样处理内存警告的:
1、ios4和ios5中,当收到内存警告时,系统会自己主动调用当前没有在界面上的VC的viewDidUnload方法。
在viewDidUnload写下例如以下代码:
if([self isViewLoaded] && ![[self view] window]) { [self setView:nil]; }2、ios6開始,viewDidUnload被弃用。苹果在开发文档中建议将内存回收的操作移到didReceiveMemoryWarning中。
那又要在didReceiveMemoryWarning写下什么才干回收内存呢?
最好的答案是,什么都不写,仅仅调用父类的相应方法!
3、这里简短地解释一下为什么ios6不在didReceiveMemoryWarning中将VC的view属性设为nil。
UIView有一个CALayer的成员变量,负责管理UIView的画图。
CALayer是一个位图图像的容器类,当UIView调用drawRect的时候。CALayer才会创建这个位图图像类。
而一个UIView占用内存的绝大部分是这个位图图像类。
所以。ios6在系统发出内存警告的时候。会自己主动回收这个位图图像类。可是不回收UIView和CALayer类。
版权声明:本文博主原创文章,博客,未经同意不得转载。