2013-06-26 2 views
4

Allocation GraphXcode инструменты Распределение роста

Я бегу UIAutomation скрипты приложения Иос. Примерно через 40 итераций:

лесозаготовок в снова и снова нажав несколько кнопок, а затем выход из

я прийти на этом графике.

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

Вопрос: должен ли график выглядеть так? С шагами, которые я выполняю, если память освобождается правильно (не-дуга), если она поддерживает наклонный график распределения/с течением времени?

ответ

6

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

Не стоит беспокоиться о распределении, тем не менее, пока вы не устраните утечку (утечки). Это может сделать это. Устраните утечку и повторите описанное выше упражнение и проверьте, не являются ли распределения плоскими. Если нет, то могут возникнуть другие проблемы. Но фиксация утечки могла полностью исправить ситуацию.

Кроме того, если вы еще не сделали, запустите инструмент через статический анализатор («Анализ» в меню Xcode «продукта» или нажмите сдвиг + команды + B). Особенно в коде MRC, который идентифицирует многие проблемы управления памятью. Это как волшебство. Перед тем, как продолжить, убедитесь, что у вас есть чистый счет.

Затем используйте инструмент Leaks, чтобы точно определить, что происходит. Затем вы можете диагностировать, почему этот конкретный объект протекает. Исправьте эту утечку перед продолжением. См. Раздел Finding Leaks руководства пользователя .

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

Например:

  • Run Allocations инструмент, вариант -Щелкните и перетащить в инструмент распределения, а затем вы можете посмотреть на дереве вызовов, и он покажет вам, что отнимает много памяти. См. Пример this answer.

  • Запустите инструмент Allocations. Пусть приложение опустится до точки покоя. Нажмите кнопку «Отметить кучу». Сделайте кучу вещей. Вернитесь к точке, где вы думаете, что материал должен был быть выпущен. Нажмите «Отметьте кучу» еще раз. Теперь посмотрим на этот снимок кучи и посмотрим на объекты, которые были выделены, но не выпущены между двумя моментальными снимками, и снова вы сможете диагностировать, что происходит.

Но все это спорный вопрос, пока вы не исправить утечку и инструмент Leaks будет точно указать просочилась объект более эффективно, чем все остальное. Исправьте это сначала, а затем посмотрите, где вы стоите.

Для получения дополнительной информации, вы можете найти некоторые из обсуждений в WWDC 2012 iOS App Performance: Memory видео полезными (особенно в демонстрационных разделах).

1

Пожалуйста, проверьте, включены ли зомби в Edit Scheme: Diagnostics. Зомби никогда не выпускаются, и если вы запустите инструмент распределения, ничто никогда не будет удалено.