Очистить содержимое UIWebView при отключении модального представления (iPhone OS 3.0) - PullRequest
21 голосов
/ 29 мая 2010

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

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

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

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

Ответы [ 6 ]

64 голосов
/ 08 ноября 2010

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

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

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

34 голосов
/ 29 мая 2010

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

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

[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil];
14 голосов
/ 19 мая 2011

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

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
8 голосов
/ 14 сентября 2011

Оценка javascript обычно выполняется быстрее, чем загрузка нового запроса.

[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"];
5 голосов
/ 31 августа 2011

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

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

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

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

0 голосов
/ 23 августа 2013

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

[m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"]
...