З 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 для зіставлення частин файлу в пам'ять та поза нею. Для отримання додаткової інформації про відображення файлів у пам’яті.
- Уникайте необмежених наборів проблем : необмежені набори проблем можуть вимагати довільно великої кількості даних для обчислення. Якщо для набору потрібно більше пам’яті, ніж доступно, можливо, ваша програма не зможе виконати обчислення. Ваші програми повинні уникати таких наборів, коли це можливо, і працювати над проблемами з відомими обмеженнями пам’яті.