关于 iPhone OS 设备上管理内存的黑魔法:不同级别的内存警告意味着什么。 1级? 2级?表盘转到 11 了吗?
背景:经过广泛的内存压力测试 - 包括在播放 iPod 音乐播放器应用程序的同时运行我的 iPad 应用程序,我倾向于忽略我收到的随机但不常见的内存警告。我的应用从不崩溃。曾经。我的应用程序没有泄漏。而且,嗯,MEMS 警告似乎并不重要。
谢谢,
道格
最佳答案
SpringBoard 记录内存级别警告。作为应用程序开发人员,您不需要关心它。只需响应 -{application}didReceiveMemoryWarning
就足够了。
警告有 4 个级别(0 到 3)。这些是从内核内存观察器设置的,可以通过 not-so-public function OSMemoryNotificationCurrentLevel()
获得.
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
没有记录如何触发级别。 SpringBoard 配置为在每个内存级别执行以下操作:
- 警告(非正常)- 重新启动或延迟自动重新启动非必要的后台应用程序,例如邮件。
- 紧急 - 退出所有后台应用程序,例如Safari 和 iPod。
- 严重及其他 — 内核将接管,可能会杀死 SpringBoard 甚至重新启动。
终止事件应用程序 (jetsam) 不是由 SpringBoard 处理,而是由 launchd
处理。
关于memory-management - iPhone 操作系统内存警告。不同级别意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2915247/