С OSMemoryNotification.h ,
/*
** Threshold values for notifications
*/
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
всего 5 уровней предупреждения о памяти (-1,3).
Относительно описания предупреждения об уровне памяти, ответ @ KennyTM превосходен.
Я хочу добавить несколько связанных пунктов, которые могут помочь ПМ и другим.
Что делать при предупреждении об уровне памяти?
После получения любого из этих предупреждений ваш метод-обработчик должен ответить, немедленно освободив ненужную память. Например, стандартным поведением класса 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
отобразить части файла в и из памяти. Для большего
информация о отображении файлов в память.
- Избегайте неограниченных наборов задач : Для неограниченных наборов задач может потребоваться
произвольно большой объем данных для вычисления. Если набор требует
больше памяти, чем доступно, ваше приложение может быть не в состоянии завершить
расчеты. Ваши приложения должны по возможности избегать таких наборов и
работать над проблемами с известными пределами памяти.