Из OSMemoryNotification.h ,
/*
** Threshold values for notifications
*/
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
всего 5 уровней предупреждения о памяти (-1,3).
Что касается описания предупреждения об уровне памяти, ответ @Kenny TM отличный.
Я хочу добавить несколько связанных моментов, которые могут помочь PM и другим.
Что делать при появлении предупреждения об уровне памяти?
При получении любого из этих предупреждений ваш метод-обработчик должен немедленно освободить всю ненужную память. Например, по умолчанию класс UIViewController очищает свое представление, если оно в настоящее время не отображается; подклассы могут дополнять поведение по умолчанию, очищая дополнительные структуры данных. Приложение, которое поддерживает кеш изображений, может ответить, выпуская любые изображения, которые в данный момент не отображаются на экране.
Как увидеть предупреждение об уровне памяти?
Из http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html.
Когда система отправляет вашему приложению предупреждение о нехватке памяти, немедленно реагируйте. iOS уведомляет все запущенные приложения, когда объем свободной памяти опускается ниже безопасного порога. (Он не уведомляет приостановленные приложения.) Если ваше приложение получает это предупреждение, оно должно освободить как можно больше памяти. Лучший способ сделать это - удалить сильные ссылки на кеши, объекты изображений и другие объекты данных, которые можно воссоздать позже.
UIKit предоставляет несколько способов получения предупреждений о нехватке памяти, включая следующие:
- Реализуйте метод applicationDidReceiveMemoryWarning: делегата приложения.
- Переопределите метод didReceiveMemoryWarning в пользовательском подклассе UIViewController.
- Зарегистрируйтесь, чтобы получить уведомление UIApplicationDidReceiveMemoryWarningNotificationnotification.
Как уменьшить объем памяти вашего приложения?
- Устранение утечек памяти.
- Делайте файлы ресурсов как можно меньше.
- Используйте Core Data или SQLite для больших наборов данных.
- Загружайте ресурсы лениво.
- Создайте свою программу, используя опцию Thumb.
Подробности на http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html.
Как разумно распределить память?
- Сократите использование автоматически выпущенных объектов : с автоматическим подсчетом ссылок (ARC) лучше выделить / инициализировать объекты и позволить компилятору освободить их для вас в подходящее время. Это верно даже для временных объектов, которые в прошлом вы могли автоматически освобождать, чтобы предотвратить их выход за пределы области действия текущего метода.
- Ограничение размера ресурсов : избегайте загрузки большого файла ресурсов, если подойдет и меньший. Вместо изображения с высоким разрешением используйте изображение, размер которого соответствует устройствам на базе iOS. Если вам необходимо использовать большие файлы ресурсов, найдите способы загрузить только ту часть файла, которая вам нужна в любой момент времени. Например, вместо того, чтобы загружать весь файл в память, используйте функции mmap и munmap для отображения частей файла в память и из нее. Для получения дополнительной информации о отображении файлов в памяти.
- Избегайте неограниченных наборов проблем : для вычисления неограниченных наборов проблем может потребоваться произвольно большой объем данных. Если для набора требуется больше памяти, чем доступно, ваше приложение может не выполнить вычисления. Ваши приложения должны по возможности избегать таких наборов и работать над проблемами с известными ограничениями памяти.