2010-05-29 59 views
21

我目前有一個UIWebView顯示在模態視圖中。它基本上是一個細節視圖,當用戶點擊一個鏈接時,它提供了一個頁面的視圖。當視圖被解散並再次提出時(當用戶點擊另一個鏈接時),先前加載的內容仍然可見並且新內容加載到最後內容的「頂部」。這很有意義,因爲UIWebView的實例在會話之間持續存在,並且只在需要內存時纔會釋放。在解除模態視圖(iPhone OS 3.0)時清除UIWebView內容

但是,我想完全清除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];並設置web視圖,以零和手動釋放在web視圖模式 - 視圖 - 辭退無無濟於事。任何想法來自乾癟的羣衆?

回答

34

發佈網絡視圖可能是最好的方法。如果視圖位於視圖層次結構中(具有超級視圖),則必須調用removeFromSuperview以使超級視圖釋放視圖。

你也可以下載一個HTML網頁字符串一個空文件:

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

有時loadHTMLString太慢。您還可以使用:

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

我不知道是否會釋放,雖然多少內存?

+2

完美!可能是視圖清除webview的最簡單的解決方案。仍然不明白爲什麼loadHTMLString如此緩慢。也許這是因爲我之後直接加載另一個頁面,並且webview在開始加載新頁面時停止加載並顯示空白頁面。 – Cray 2011-02-22 15:09:47

+0

這裏最好的解決方案。不知道爲什麼這不是最好的投票答案。無論如何 - 偉大的答案! – filou 2013-02-14 00:26:12

+1

這種方法最好的事情是委託方法webViewDidFinishLoad不會被調用! – user523234 2013-05-14 14:50:53

14

似乎在某些情況下該方法通過drawnonward建議和搶劫可能無法正常工作(可能的東西做與同時被清除頁面上的CSS),然而,這沒有工作:

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

在我來說,我需要瞬間從它的內容清除Web視圖,並能夠啓動加載別的東西的時候了。加載一個空文檔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

我見過的最佳答案。 – 2015-11-12 10:19:32

0

我寧願以下幾點:

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

爲什麼你喜歡它? – jujule 2015-09-22 14:38:49