Утечки на телефоне, а не на эмуляторе? - PullRequest
0 голосов
/ 13 августа 2010

Привет всем, у меня проблема, и мне нужен совет.

Я работаю над средством просмотра документов, которое состоит из следующих основных частей:

  1. zipбиблиотека, которая распаковывает контейнер документов (minizip)
  2. xml библиотека, которая анализирует документ (libxml2)
  3. код пользовательского интерфейса, который отображает документ на экране

Ничего слишком сложногоили фантазии.

На эмуляторе все прекрасно работает;зритель выполняет, как ожидалось.Я проверил его через инструменты, и нет никаких утечек.ObjectAlloc сообщает о 5,5 мегабайтах, выделенных за время существования программы просмотра (это многократно открывает мой тестовый документ).

К сожалению, на устройстве (iphone 3G, iOS 3.1.2) все не так ясно.Довольно часто повторное открытие тестового файла вызывает ошибку нехватки памяти, и файл не открывается.Начальное открытие файла всегда работает.Несмотря на то, что тестирование на эмуляторе не выявило утечек и общий объем памяти был скромным, я вынужден сделать вывод, что на iphone действительно есть утечка (потому что, почему повторное открытие вызывает ошибку из-за нехватки памяти).

Я пытался запустить инструменты на устройстве, но приложение зависло (?!) На полпути, так что на самом деле у меня не получилось запустить Leaks.

Я считаю, что где-то есть значительная утечка, которая обнаруживается только на устройстве.Итак, у меня есть две опции (в произвольном порядке):

  • Рефакторинг моего кода таким образом, чтобы избежать использования библиотеки zip.Это устранит потенциальный источник утечек.Трудоемкий и неокончательный.
  • Переформатируйте и переустановите все на моем телефоне (возможно, есть что-то, что вызывает проблемы там).Примерно так же, как и выше, отнимает много времени и теряет данные моего телефона.Может быть, это позволит мне запустить Утечки.

Как вы видите, я достигаю здесь.Есть ли что-то очевидное, чего мне не хватает?

Заранее спасибо, ребята.

1 Ответ

1 голос
/ 13 августа 2010

Может быть, вам следует попытаться запустить не Leaks, а Allocations Instrument на вашем устройстве, и искать утечки с его помощью (вручную)?

+ (возможно, это звучит глупо) Удалите приложение с устройства и повторитеClean-Build-Run с утечками (почему бы и нет?).


О ручном поиске утечек.

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

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

...