iPhone: распределение инструментов постоянно увеличивается - PullRequest
2 голосов
/ 29 июня 2010

Я использую инструменты с инструментом распределения.Я тестирую только фиксированное взаимодействие с моим приложением.

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

Поэтому я запускаю свое приложение на инструментах (через Запуск с Performance Tool -> Allocations) и выполняю следующие взаимодействия:

1.  App Loads
2.  I wait a bit until allocations graph stabilizes
3.  I tap/push into my navigation controller until the deepest level.
4.  I wait for the images to load and for the allocations graph to stabilize.
5.  I tap back out of the navigation controller until I'm back to the root level.
6.  I wait for the allocations graph to stabilize.
7.  GOTO 3.

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

Так что временная шкала выглядит примерно так:

1.  Start: 1mb
2.  Push controllers/Load images: 4mb
3.  Pop controllers: 1.1mb
4.  Push controllers/Load images: 4.1mb
5.  Pop controllers: 1.2mb
6.  ... etc ... (always increasing slightly)

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

Любые мысли будут полезны.

Ответы [ 5 ]

1 голос
/ 30 июня 2010

Если у вас новейший iPhone SDK, версия Instruments, с которой он поставляется (я считаю, 2.7), имеет функцию HeapShot. Вы можете посмотреть некоторые видео WWDC '10 для получения дополнительной информации, но, по сути, вы делаете снимок в первый раз, когда запускаете контроллеры, а затем снова, когда вы включаете второй раз. Он покажет вам любые выделения памяти, которые отличаются в два момента.

1 голос
/ 29 июня 2010

Это в симуляторе или на устройстве?

Поскольку хорошо проверить, существует ли проблема на устройстве, так как некоторые системные библиотеки освобождают память на устройстве чаще, чем в симуляторе.*

Если «Утечки» ничего не показывают, это потому, что вы все еще где-то держите ссылку на память, даже если вы так не думаете.Чтобы отследить это, выделите небольшую часть графика, где объем памяти увеличивается, и выберите «создано и все еще жив».Теперь вы можете видеть только выделенную память и начать отслеживать, где проблема.

0 голосов
/ 29 июня 2010

У вас, вероятно, есть утечка.Проверьте прибор на наличие утечек, который поможет вам их найти.

0 голосов
/ 29 июня 2010

Если вы загружаете изображения, есть большая вероятность, что вы используете [UIImage imageNamed:], что приводит к кешированию системы и может быть причиной использования вашей памяти.Но вкратце да, у вас есть утечка.

0 голосов
/ 29 июня 2010

Да, это утечка. Один из ваших контроллеров вида вдоль линии чего-то не хватает.

...