【发布时间】:2011-09-28 09:41:27
【问题描述】:
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 版本之前不存在。相反,我们会解决这些错误,并找出 Apple 未能记录的实际发生的情况。
EDIT2: ...查看链接的头文件,看起来苹果使用底层私有函数来找出当前的级别:“OSMemoryNotificationLevel OSMemoryNotificationCurrentLevel(void)” - 但我想我们不可能得到过去的 Apple 提交 :( ?
【问题讨论】:
标签: ios