Очередная утечка памяти в iphone требует помощи. Нужны советы по следующим шагам - PullRequest
3 голосов
/ 15 августа 2010

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

Утечки у меня не слишком большие (несколько К максимум), но я хочу наверняка их устранить.Существует две категории утечек, и у меня есть несколько снимков экрана каждого из инструмента Instruments Leaks.

Первая - это просто странная штука с Java / Web, которая происходит в течение 10 секунд после запуска моего приложения: независимо от того, чтокод ветки беру.Это как что-то происходит на заднем плане, что вызывает это.У меня есть пример кода от уважаемых авторов программ для iPhone, и они делают то же самое, поэтому я не слишком беспокоюсь о 64 байтах, которые я теряю во время запуска приложения.Эта утечка произойдет задолго до того, как я создам любую из моих веб-форм, таких как инструменты MapKit, например, обратный геокодер ... но я использую их позже в своем коде.

Вторая, однако, коварна, и ячувствую себя дураком из-за того, что не в состоянии отследить это ... потому что заставить это случиться так ПРОСТО.Все, что я делаю, это создаю UITextField в Интерфейсном Разработчике и использую его, как всякий раз, когда я когда-либо делал прежде.Это происходит на любом UITextField, который я создаю, когда на iPhone появляется виртуальная клавиатура.И утечки памяти довольно существенны (сотни байтов за раз);предположительно из графики, связанной с созданием экранных кнопок.

Итак, для ясности, когда я касаюсь любого из этих текстовых полей, появляется виртуальная клавиатура, и я теряю несколько сотен (или больше)байт.Я даже ничего не печатаю, не назначаю переменные и т. Д. Между прочим, это происходит только в первый раз, когда виртуальная клавиатура всплывает в текстовом поле.(Так что мои утечки «несколько сдержаны».) (Это то, что они сказали о недавней нефтяной скважине, а?)

Вы спросите, что отличается от контроллера, которому принадлежат эти поля UITextFields.Ну, единственное, о чем я могу думать, это то, что это динамически создаваемый UIViewController, который управляется UINavigationController.

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

Итак, я ищу совет о том, какими должны быть мои следующие шаги.(Я начал процесс комментирования кода, перехода к резервным копиям и т. Д.)

Снимки экрана с приложенным инструментом "Утечки".

Похоже, я могу включить только одну ссылку, пока не получунекоторые точки повторения.Я покажу последнюю утечку.

Снимок экрана Memleak 2: текст ссылки

-Pete

PS Я использую последний Xcode (3.2.3) на сегодняшний день с самой новой версией 4.0.2 iOS.

1 Ответ

2 голосов
/ 15 августа 2010

Люди, плохо знакомые с Инструменты , как правило, смотрят только на симпатичный график и склонны немного вводить его в заблуждение.Вам следует обратить внимание на числа , а не на графики.

Согласно вашему скриншоту , это утечки памяти из библиотек, которые вы используете.В частности, эти фреймворки:

  • JavaScriptCore
  • Webcore
  • GraphicsServices

Поскольку фреймворки вызывают эти утечки, вы ничего не можетеделать с этим, если у вас нет исходного кода.

Согласно вашему скриншоту:

Общий объем утечки памяти: 240 байт ( 0,23 кб ).

Ни одного килобайта, так что я не потерял бы из-за этого сна: P

...