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