Утечки памяти при использовании UIWebView и Javascript

Я пытаюсь исправить кучу утечек, которые вызывает мой UIWebView, и не могу найти ни их источник, ни обходной путь. Что я делаю, так это получаю некоторый контент из Интернета через сетевой запрос, затем собираю свой HTML-код и загружаю его на лету :

NSString* body = <some HTML>;
NSString* html = [NSString stringWithFormat:kHTMLTemplate, [self scripts], [self styles], body];
[_webView loadHTMLString:html
               baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

. Каждый раз, когда появляется новый контент, я снова запускаю loadHTMLString, чтобы обновить веб-представление. Я повторно использую тот же веб-представление, тот же контроллер, все то же самое.

Инструменты показывают очень странную картину, в которой все просочившиеся объекты являются общими -блоками различных размеров, и ни к одному из них не привязана какая-либо информация :нет ответственной библиотеки, нет ответственного фрейма и т. д. Каждый раз выполняется loadHTMLString, добавляются новые утечки.

Кажется, в S.O. есть несколько тем. о UIWebViewутечке памяти. Я пробовал все предложения, которые я нашел (, например, установить NSURLCacheна ноль или сбросить его; Я пытался освободить существующий UIWebView и выделять новый каждый раз, когда у меня появляются новые данные и т. д. ), но ничего не помогло.

Мои исследования до сих пор привели к одному ясному выводу :кажется, что утечки присутствуют только в том случае, если HTML, который я загружаю в представление, содержит какой-либо Javascript. Если вы заметили строку htmlвыше, она состоит из нескольких компонентов; один из них — [self scripts], функция, которая просто возвращает:

return @"<script type='text/javascript' src='jquery-1.4.4.min.js'></script>"
        "<script type='text/javascript' src='jmy.js'></script>";

Если я уберу это, утечек не будет. Но утечки появляются, как только я добавляю тег <script>в свой HTML. Они даже появляются, если я просто включаю файл jquery (или любой другой файл js, что касается этого):

return @"<script type='text/javascript' src='jquery-1.4.4.min.js'></script>";

Итак, вопрос :есть ли у кого-нибудь представление о том, что здесь происходит? Ясно, что включение файла Javascript в мой HTML приводит к UIWebViewутечке памяти.

Тот факт, что утечки появляются как при повторном использовании одного и того же UIWebViewобъекта, так и при создании нового экземпляра каждый раз, когда у меня есть контент, заставляет меня думать, что должно быть что-то в способе обработки файлов javascript с помощью loadHTMLString, что приводит к утечкам.

Кто-нибудь знает, как это можно исправить?

enter image description here

10
задан sergio 5 August 2012 в 11:13
поделиться