Утечка памяти в UIWebView - PullRequest
       14

Утечка памяти в UIWebView

4 голосов
/ 20 января 2012

У меня есть приложение для iPad (IOS 4.3 и 5.0), которое создает UIView, по крайней мере, с 2 подпредставлениями каждый раз, когда пользователь перемещается вперед или назад. 2 подпредставления являются объектами UIWebView.

При каждом соответствующем пролистывании старые UIWebView удаляются и освобождаются должным образом (removeFromSuperview, затем stopLoading и присваивают делегату значение nil), а родительский UIView освобождается. Я могу подтвердить, что родительский UIView и 2 дочерних UIWebViews полностью исчезли.

Я вижу количество сохраняемых записей в веб-просмотрах по мере их удаления, и я уверен, что они действительно удаляются каждый раз. Однако мое распределение памяти продолжает увеличиваться при каждом пролистывании на ~ 200-350 КБ. Нет утечек в приборе, но я вижу, как медленно увеличивается использование памяти. На iPad 1 приложение в конечном итоге (в течение 6-10 минут умеренного использования) получает несколько предупреждений о памяти и закрывается. LowMemory аварийный журнал ... и т. Д. Генерируется.

Мы используем stringByEvaluatingJavaScriptFromString и loadRequest для заполнения веб-представлений. Использование памяти возрастает, даже когда ничего не вводится или не загружается в веб-представления.

Кто-нибудь испытывает подобное поведение с UIWebViews? Кто-нибудь успешно справился с этим?

Хотя, комментарии и ответы будут с благодарностью.

Ответы [ 3 ]

1 голос
/ 20 января 2012

Попробуйте использовать инструменты, но с шаблоном «Распределения» и посмотрите колонки «# Living» для UIWebView.Я обычно использую его следующим образом:

  1. Приложение профиля с шаблоном Allocations
  2. «Разбудите» приложение, пройдя по всем вкладкам, прокрутите и т.д.
  3. Нажмите«Отметить кучу», это создаст «базовую» кучу снимков
  4. Делайте то, что, по вашему мнению, заставляет объекты оставаться вокруг
  5. Нажмите «Отметить кучу» еще раз, это создаст «Кучую лавку #»heapshot
  6. Проверьте объекты в «Heapshop #», который покажет размер и количество созданных и живых объектов со времени последнего снимка кучи.
  7. Перейти к 4
0 голосов
/ 24 января 2012

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

[webview stringByEvaluatingJavaScriptFromString:@"something()"];

Кажется, там что-то странное.

0 голосов
/ 20 января 2012

Не известно о какой-либо утечке, но если вы уничтожаете и заново создаете одну и ту же иерархию представлений при каждом пролистывании, почему бы не сохранить представления и не использовать их снова?

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

...