Я пытаюсь исправить кучу утечек, которые вызывает мой 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
, что приводит к утечкам.
Кто-нибудь знает, как это можно исправить?