Что касается черного искусства управления памятью на устройствах iPhone OS: что означают разные уровни предупреждения о памяти. 1-й уровень? Уровень 2? Циферблат идет на 11?
Контекст: после продолжительного периода стресс-тестирования памяти, в том числе запуска моего приложения iPad с проигрывателем iPod, я склонен игнорировать случайные, но нечастые предупреждения памяти, которые получаю. Мое приложение никогда не вылетает. Когда-либо. В моем приложении нет утечек. И, ну, мем-предупреждения, похоже, не имеют значения.
Спасибо,
Дуг
Предупреждения об уровне памяти регистрируются SpringBoard. Как разработчику приложения вам не нужно об этом заботиться. Достаточно просто ответить
-{application}didReceiveMemoryWarning
.Есть 4 уровня предупреждений (от 0 до 3). Они устанавливаются наблюдателем за памятью ядра и могут быть получены с помощью функции not-so-public
OSMemoryNotificationCurrentLevel()
.Как срабатывают уровни, не задокументировано. SpringBoard настроен на выполнение следующих действий на каждом уровне памяти:
Удаление активного приложения (jetsam) не обрабатывается SpringBoard, но
launchd
.источник
libsystem_c.dylib
. Было бы здорово, если бы я мог воспользоваться им. СпасибоИз OSMemoryNotification.h ,
всего 5 уровней предупреждения о памяти (-1,3).
Что касается описания предупреждения об уровне памяти, ответ @Kenny TM отличный.
Я хочу добавить несколько связанных моментов, которые могут помочь PM и другим.
Что делать при появлении предупреждения об уровне памяти?
При получении любого из этих предупреждений ваш метод-обработчик должен немедленно освободить всю ненужную память. Например, по умолчанию класс UIViewController очищает свое представление, если оно в настоящее время не отображается; подклассы могут дополнять поведение по умолчанию, очищая дополнительные структуры данных. Приложение, которое поддерживает кеш изображений, может ответить, выпуская любые изображения, которые в данный момент не отображаются на экране.
Как увидеть предупреждение об уровне памяти?
Из http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html.
Когда система отправляет вашему приложению предупреждение о нехватке памяти, немедленно реагируйте. iOS уведомляет все запущенные приложения, когда объем свободной памяти опускается ниже безопасного порога. (Он не уведомляет приостановленные приложения.) Если ваше приложение получает это предупреждение, оно должно освободить как можно больше памяти. Лучший способ сделать это - удалить сильные ссылки на кеши, объекты изображений и другие объекты данных, которые можно воссоздать позже.
UIKit предоставляет несколько способов получения предупреждений о нехватке памяти, включая следующие:
Как уменьшить объем памяти вашего приложения?
Подробности на http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html.
Как разумно распределить память?
источник