苹果将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版本发布之前,许多(大多数?)边界插入应用程序将不存在。取而代之的是,我们解决了这些错误,并弄清了Apple无法记录该错误的实际情况。
EDIT2:...查看链接的头文件,看上去好像苹果使用了底层私有(private)函数来找出当前级别:“OSMemoryNotificationLevel OSMemoryNotificationCurrentLevel(void)”-但我想我们无法摆脱过去的Apple提交 :( ?
最佳答案
我不认为警告级别适用于应用程序,但是-我知道这不是您想要听到的-并不重要。仅仅因为操作系统具有两个不同级别的内存警告,并不意味着您应该在每个级别上执行不同的操作,并希望其他应用程序执行正确的操作。
The documentation说:
没有关于“小心”或“即将杀死”的说法。这可能是当前发生的情况,但是在iOS5中是一样的吗?还是在更高版本中?做出这些假设是非常危险的。
我认为您需要考虑优化内存使用率。几乎总有一种方法可以优化镜像,释放缓存/中间数据,更有效地使用自动释放池,更小/更有效的数据结构。您没有说您当前正在使用什么技术,因此很难具体说明。
关于ios - 如何在iOS中检测到level = 2内存警告?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7581226/