iOS - использование и понимание инструментов с помощью Allocations and Memory Monitor (Physical Memory Free) - PullRequest
2 голосов
/ 26 февраля 2012

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

Так что я посмотрел на это в Instruments.У меня есть распределение и монитор памяти в использовании.Распределение показывает довольно устойчивые байты от 3 до 4 МБ, в то время как я просто позволяю своему приложению инициализироваться и прийти в равновесие.Тем не менее, общий объем байтов превышает 50 МБ.Я не особо задумывался об этом, пока не посмотрел на монитор памяти и не увидел, что использование памяти увеличивается и уменьшается, вызывая предупреждения памяти.(Мне кажется странным, что это не отображается одновременно на графике распределения.)

Приложение должно находиться в точке равновесия, но, очевидно, это не так.Мой вопрос: как я могу использовать инструменты, чтобы помочь мне понять, почему использование памяти растет и падает?

1 Ответ

7 голосов
/ 26 февраля 2012

Инструменты как инструмент для отладки просто превосходны. Из того, что я могу понять, вы пытались использовать инструмент распределения, поэтому я перейду к этому. Распределение детализирует количество объектов, выделяемых вашим приложением во время выполнения, а также их ссылки в памяти, расположение, даже вызывающий код, который выделяет указанные объекты. Когда инструменты запускают инструмент распределения, ваше приложение начинает сообщать обо всех распределениях в виде синих точек, которые накапливаются все выше и выше по мере выполнения вашего приложения (естественно, так как вам следует распределять все больше и больше объектов). Всего байтов отображает объем памяти, который КАЖДОЕ выделенное ваше приложение добавило вместе. Я хочу подчеркнуть это для вашего случая: это не означает, что ваше приложение в настоящее время использует 50 МБ памяти! , это просто означает, что ваше приложение использовало всего 50 МБ. Ваше приложение Очевидно, ограничено количество памяти, которое имеет устройство, и 3-4 МБ это не много, если учесть, что первый поколения. У iPhone было около 128 Мб, но для более сложных приложений ОС обычно убивает другие приложения, прежде чем убить ваши.

Что касается другого графика распределения с пиками, а не непрерывного линейного графика, то есть для подробного описания количества распределений, происходящих в данный момент времени. Обычно шипы можно игнорировать, если только за один небольшой промежуток времени не будет много больших шипов.

В любом случае, для решения вашей конкретной проблемы с предупреждением памяти, честно зависит, сколько предупреждений памяти вы получаете, и на каком уровне находятся предупреждения. А что касается твоих утечек, мой единственный совет: раздави их как можно скорее! Когда вы видите утечку (красная полоса в инструменте утечки), нажмите на полосу и найдите объекты, которые просочились. Когда вы выберете протекший объект, а затем выберите правую боковую панель, он покажет вам код, который протекает. Когда вы дважды щелкнете мышью по любой части правой боковой панели, она даже откроет определенную строку и определит класс утечки!

...