Живые байты против реальной памяти в мониторе активности на iOS - PullRequest
10 голосов
/ 10 января 2012

Я работаю над приложением для iOS, которое будет создавать множество мелких объектов и объектов с плавающей точкой, и пытаюсь понять, сколько потребляемой памяти оно потребляет.

Когда я запускаю инструмент "Распределения", он говорит, что у меня есть около 2 МБ «живых байтов», и эта цифра остается примерно постоянной при перемещении по приложению (всплывает до 3 МБ или около того, когда приложение занято, но затем уменьшается до 2 МБ).

Но когда я запускаю инструмент «Мониторинг активности», «Реальная память» моего приложения составляет 25 МБ после завершения запуска и быстро растет, когда в моем CALayer происходит рисование.Менее чем за минуту оно переходит более 100 МБ.

Почему «Живые байты» показывают 2 МБ, а «Реальная память» показывает 100 МБ?

Мой CALayer рисует тонн путей, он привязывает ЦП к 100% в течение нескольких секунд, чтобы завершить одну операцию рисования, и загружает все эти точки из объекта NSData в значения CGPoint, а затем снова обрабатывает их (объект NSData является сжатымверсия нарисованных точек, сохраняя дельты от одной точки к другой, поэтому я храню их в оперативной памяти, но не сохраняю фактические CGPoints).

Он также кэширует результат рисования в UIImage,и они хранятся в массиве «первым пришел - первым вышел», размер которого не превысит 500 КБ.

Ответы [ 2 ]

13 голосов
/ 10 января 2012

Номер реальной памяти включает блоки памяти, которые ваше приложение использовало и уже выпустило, но ОС еще не удосужилась восстановить или повторно использовать (но может при необходимости). Живая память - это «грязная» память, которая не может быть восстановлена ​​ОС без уничтожения вашего приложения, если ваше приложение работает и память переполнена.

11 голосов
/ 15 января 2012

Оказывается, моя проблема была NSZombieEnabled.

Отключение в Правки схемы> Выполнить> Аргументы> Переменные среды решило проблему использования дополнительной памяти.

...