大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > IOS技巧 > ios6 处理内存警告

ios6 处理内存警告(1)

关键词:警告内存ios6  阅读(1943) 赞(13)

[摘要]本文是对ios6 处理内存警告的讲解,对学习IOS苹果软件开发有所帮助,与大家分享。

iPhone下每个app可用的内存是被限制的,如果一个app使用的内存超过20M,则系统会向该app发送MemoryWarning消息。收到此消息后,app必须正确处理,否则可能出错或者出现内存泄露。

app收到MemoryWarning后会调用:UIApplication::didReceiveMemoryWarning->UIApplicationDelegate::applicationDidReceiveMemoryWarning,然后调用当前所有的viewController进行处理。因此处理的主要工作是在viewController。

当我们的程序在第一次收到内存不足警告时,应该释放一些不用的资源,以节省部分内存。否则,当内存不足情形依然存在,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也不会被调用了。但是到了ios6.0之后,这里又有所变化,ios6.0内存警告的viewDidUnload被屏蔽,即又回到了ios3.0的时期的内存管理方式。


iOS3-iOS5.0以前版本收到内存警告:
调用didReceiveMemoryWarning内调用super的didReceiveMemoryWarning会将controller的view进行释放。所以我们不能将controller的view再次释放。
处理方法:

Java代码

«上一页12下一页»


相关评论