Эй, у меня проблемы, и я хотел бы получить совет.Утечки по телефону, но не на эмуляторе?
Я работаю на зрителя документа, который состоит из следующих основных частей:
- зип библиотека, которая распаковывает документ контейнер (minizip)
- XML библиотека, которая анализирует документ (libxml2)
- Код пользовательского интерфейса, который отображает документ на экране
Ничего сложного или необычного.
На эмуляторе все работает красиво; зритель выполняет так, как ожидалось. Я запустил его с помощью инструментов, и утечек нет. ObjectAlloc сообщает о 5,5 мегабайтах, выделенных за время существования средства просмотра (это неоднократно открывает мой тестовый документ снова и снова).
К сожалению, на устройстве (iphone 3G, iOS 3.1.2) все не так ясно. Довольно часто повторное открытие тестового файла вызывает ошибку из памяти, и файл не открывается. Начальное открытие файла всегда работает. Несмотря на то, что тестирование эмулятора подсвечивало отсутствие утечек, а общий объем памяти был скромным, я вынужден сделать вывод о том, что на самом деле есть утечка на iphone (потому что почему повторное открытие вызывает ошибку из памяти).
Я попытался запустить инструменты на устройстве, но приложение заглохлоло (?!) На полпути через пробег, так что на самом деле у меня не было успеха с утечками.
Я считаю, что там есть значительная утечка, которая появляется только на устройстве. Итак, у меня осталось два варианта (в определенном порядке):
- Рефакторинг моего кода таким образом, чтобы избежать использования zip-библиотеки. Это устранит потенциальный источник утечек. Много времени и безрезультатно.
- Reformat и переустановите все на моем телефоне (возможно, есть что-то, что вызывает там проблему). Как и прежде, много времени и отстой, теряя мои телефонные данные. Может быть, это позволит мне запустить утечки.
Как вы можете видеть, я достигаю здесь. Есть ли что-то очевидное, что мне не хватает?
Спасибо заранее, ребята.
Вы хотите сказать "ObjectAlloc"? И что вы подразумеваете, ища их вручную? Спасибо за предложения! – EightyEight
Хм, я так думаю. Но в моих инструментах (в меню выбора инструментов) и в моем XCode (Главное меню: Выполнить -> Выполнить с помощью инструмента Perfomance) он называется «Allocations». И о поиске вручную - см. Мой ответ (я отредактировал его, чтобы добавить подробности). – kpower