0

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

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

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

Ничего сложного или необычного.

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

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

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

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

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

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

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

ответ

1

Возможно, вам следует попытаться запустить не утечку, а инструмент распределения на вашем устройстве, а также выполнить поиск утечек (вручную)?

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


Об обнаружении ручного утечки.

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

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

+0

Вы хотите сказать "ObjectAlloc"? И что вы подразумеваете, ища их вручную? Спасибо за предложения! – EightyEight

+0

Хм, я так думаю. Но в моих инструментах (в меню выбора инструментов) и в моем XCode (Главное меню: Выполнить -> Выполнить с помощью инструмента Perfomance) он называется «Allocations». И о поиске вручную - см. Мой ответ (я отредактировал его, чтобы добавить подробности). – kpower

Смежные вопросы