如何在iOS中检测level = 2内存警告?

Apple将lev = 1和lev = 2的内存警告定义为非常不同(一个是“嗯.内存不多.小心”,另一个是“我即将杀死一个进程,你有5 … 4 .. .3 ……“)

…但是你如何以编程方式找出你收到的是哪一个

我有一个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提交:(?

解决方法

我认为警告级别不适用于应用程序,但我知道这不是您想要听到的 – 这并不重要.仅仅因为操作系统有两个不同级别的内存警告并不意味着你应该在每个级别做不同的事情,并希望其他应用程序做正确的事情.

The documentation说:

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中是否相同?还是在以后的版本?做出那些假设是非常危险的.

我认为您需要考虑优化内存使用情况.几乎总有一种方法可以优化图像,释放缓存/中间数据,更有效地使用自动释放池,更小/更有效的数据结构.您没有说明您目前使用的技术,因此很难具体说明.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...