在解除模态视图时清除UIWebView内容(iPhone OS 3.0)

时间:2010-05-29 00:51:18

标签: memory iphone-sdk-3.0 uiwebview modalviewcontroller

我目前有一个在模态视图中显示的UIWebView。它基本上是一个详细视图,提供用户单击链接时的页面视图。当视图被取消然后再次启动时(当用户单击另一个链接时),先前加载的内容仍然可见,并且新内容加载到最后一个内容的“顶部”。这是有道理的,因为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
  3. 我已尝试[[NSURLCache sharedURLCache] removeAllCachedResponses];并将webView设置为nil并在模态视图关闭时手动释放webView无效。来自干瘪群众的任何想法?

6 个答案:

答案 0 :(得分:64)

有时loadHTMLString太慢了。您也可以使用:

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

我不确定这是否会释放大量内存...

答案 1 :(得分:34)

发布网络视图可能是最好的方法。如果视图位于视图层次结构中(具有超级视图),则必须调用removeFromSuperview以使superview释放视图。

您还可以为空文档加载html字符串:

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

答案 2 :(得分:14)

在某些情况下,drawonward和rob建议的方法似乎不起作用(可能与正在清除的页面上的CSS有关),但这确实有效:

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

答案 3 :(得分:8)

评估javascript通常比加载新请求更快。

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

答案 4 :(得分:5)

在我的情况下,我需要立即从其内容中清除Web视图,并能够立即开始加载其他内容。既不加载空文档HTML字符串也不用JavaScript清除页面都会产生预期效果。相反,我用过:

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

这会将视图清除为默认背景,并按预期启动下一页的加载。

我希望这也有助于其他人。

答案 5 :(得分:0)

我更喜欢以下内容:

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