Очистить содержимое UIWebView при закрытии модального представления (iPhone OS 3.0)

В настоящее время у меня есть UIWebView, который отображается в модальном представлении. По сути, это подробное представление, которое обеспечивает представление страницы, когда пользователь щелкает ссылку. Когда представление закрывается, а затем снова открывается (когда пользователь щелкает другую ссылку), ранее загруженное содержимое все еще отображается, а новое содержимое загружается «поверх» последнего содержимого. Это имеет смысл, потому что экземпляр UIWebView сохраняется между сеансами и освобождается только тогда, когда требуется память.

Однако я хотел бы полностью очистить UIWebView при закрытии модального представления, чтобы 1) содержимое было очищено и 2) освобождена память. Пока мои исследования и попытки не нашли ответа. Эти ссылки у меня не сработали:

  1. можно ли освободить память UIWebView?
  2. Повторно использованный UIWebView, показывающий ранее загруженное содержимое для короткая секунда на iPhone

Я пробовал [[NSURLCache sharedURLCache] removeAllCachedResponses]; и установил для webView значение nil и вручную выпустил webView после модального представления-увольнения, но безрезультатно. Есть мысли из иссохших масс?


person Ricky    schedule 29.05.2010    source источник


Ответы (6)


Отключение веб-просмотра, вероятно, является лучшим подходом. Если представление находится в иерархии представлений (имеет суперпредставление), вы должны вызвать removeFromSuperview, чтобы заставить суперпредставление освободить представление.

Вы также можете загрузить строку html для пустого документа:

[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil];
person drawnonward    schedule 29.05.2010

Иногда loadHTMLString работает слишком медленно. Вы также можете использовать:

[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML = \"\";"];

Я не уверен, что это освободит много памяти ...

person rob    schedule 08.11.2010
comment
Идеально! Наверное, самое простое решение для визуальной очистки веб-просмотра. Все еще не понимаю, почему loadHTMLString такой медленный. Возможно, это потому, что я загружаю другую страницу сразу после этого, а webview перестает загружаться и отображать пустую страницу, когда начинает загружать новую. - person Cray; 22.02.2011
comment
Лучшее решение здесь. Не знаю, почему это не лучший ответ. В любом случае - отличный ответ !! - person filou; 14.02.2013
comment
Лучшее в этом методе - то, что метод делегата webViewDidFinishLoad не вызывается! - person user523234; 14.05.2013
comment
Кстати, это не проясняет содержимое в формате pdf, любая идея? - person user523234; 14.05.2013
comment
Ух ты решила мою проблему !!! Решение javascript на 50% быстрее, чем решение load nil string! ... Большое вам спасибо! - person Usi Usi; 17.07.2013
comment
очистка тела без удаления ранее добавленных событий к объектам вызовет утечку памяти - person Porizm; 26.09.2016

Кажется, что при некоторых обстоятельствах методы, предложенные drawonward и rob, могут не работать (возможно, что-то связано с CSS на очищаемой странице), однако это действительно сработало:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
person Adrian B    schedule 19.05.2011

оценка javascript обычно происходит быстрее, чем загрузка нового запроса.

[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"];
person surajz    schedule 14.09.2011
comment
Лучший ответ, который я видел. - person Idan Moshe; 12.11.2015

В моем случае мне нужно было мгновенно очистить веб-представление от его содержимого и сразу же начать загружать что-то еще. Ни загрузка пустой HTML-строки документа, ни очистка страницы с помощью JavaScript не привели к желаемому эффекту. Вместо этого я использовал:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://stackoverflow.com"]]];

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

Надеюсь, это поможет и кому-то другому.

person Ivan Karpan    schedule 31.08.2011

я предпочитаю следующее:

[m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"]
person zqxiaojin    schedule 23.08.2013
comment
почему ты предпочитаешь это? - person jujule; 22.09.2015