2010-05-29 2 views
21

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

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

  1. is it possible to free memory of UIWebView?
  2. Reused UIWebView showing previous loaded content for a brief second on iPhone

Я попытался [[NSURLCache sharedURLCache] removeAllCachedResponses]; и установив WebView в ноль и вручную отпуская Webview После модальных ракурса-не уволить нет помогло. Любые мысли из размороженных масс?

ответ

34

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

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

[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil]; 
65

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

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

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

+2

Отлично! Вероятно, это самое простое решение для визуального устранения веб-просмотра. Все еще не понимаю, почему loadHTMLString настолько медленный. Возможно, это потому, что я загружаю другую страницу сразу после этого, и веб-просмотр останавливает загрузку и показывает пустую страницу, когда она начинает загружать новую. – Cray

+0

Лучшее решение здесь. Не знаю, почему это не лучший голосовой ответ. В любом случае - отличный ответ! – filou

+1

Самое лучшее в этом методе заключается в том, что метод делегата webViewDidFinishLoad не будет вызван! – user523234

14

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

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; 
5

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

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

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

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

8

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

[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"]; 
+1

Лучший ответ, который я видел. –

0

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

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

Почему вы предпочитаете это? – jujule

 Смежные вопросы

  • Нет связанных вопросов^_^