…但是你如何以编程方式找出你收到的是哪一个?
我有一个iPad应用程序使用专业工具处理图像,并且lev = 1内存警告是不可避免的 – 即使处理小块图像,它仍然耗尽大量内存只是为了显示所有GUI等.
我得到lev = 1所有的时间,我几乎无能为力.
lev = 2个内存警告是一个非常不同的问题.如果我得到一个lev = 2通常意味着有一些后台应用占用了大量内存,或者用户所做的事情已经臃肿了 – 我需要采取紧急措施来防止我被杀.有些事情我可以做 – 但所有这些都对用户不利(例如删除所有GUI,等待几秒钟,然后重新加载).
所以…我在“didRecieveMemoryWarning”中需要两个不同的代码路径:一个用于lev = 1个警告,一个用于lev = 2个警告.
编辑:警告级别的一些信息:iPhone OS Memory Warnings. What Do The Different Levels Mean?
注意:Apple经常“不记录”事情.如果我们作为开发人员只坚持记录的信息,以及API的无错误部分,那么许多(大多数?)边界推送应用程序将在以后的几个iOS版本中不存在.相反,我们解决了这些错误,并且我们计算出苹果公司未能记录它的实际情况.
EDIT2:…查看链接的头文件,看起来像是苹果用来找出当前哪个级别的底层私有函数:“OSMemoryNotificationLevel OSMemoryNotificationCurrentLevel(void)” – 但我想我们没办法让这个过去Apple提交:(?
解决方法
It is strongly recommended that you implement this method. If your
application does not release enough memory during low-memory
conditions,the system may terminate it outright.
没有关于“小心”或“即将杀人”的言论.这可能是目前发生的事情,但在iOS5中是否相同?还是在以后的版本?做出那些假设是非常危险的.
我认为您需要考虑优化内存使用情况.几乎总有一种方法可以优化图像,释放缓存/中间数据,更有效地使用自动释放池,更小/更有效的数据结构.您没有说明您目前使用的技术,因此很难具体说明.