21

我目前有一个显示在模态视图中的 UIWebView。它基本上是一个详细视图,在用户单击链接时提供页面视图。当视图被关闭然后再次打开时(当用户单击另一个链接时),之前加载的内容仍然可见,并且新内容加载到最后一个内容的“顶部”。这是有道理的,因为 UIWebView 的实例在会话之间持续存在,并且仅在需要内存时才释放。

但是,我想在模式视图被关闭时完全清除 UIWebView,以便 1)清除内容和 2)释放内存。到目前为止,我的研究和尝试还没有找到答案。这些链接对我不起作用:

  1. 是否可以释放 UIWebView 的内存?
  2. 重用的 UIWebView 在 iPhone 上短暂显示之前加载的内容

我已经尝试[[NSURLCache sharedURLCache] removeAllCachedResponses];将 webView 设置为 nil 并在 modal-view-dismiss 时手动释放 webView 无济于事。干瘪的群众有什么想法吗?

4

6 回答 6

64

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

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

我不确定这是否会释放很多内存......

于 2010-11-08T20:00:03.190 回答
34

释放 Web 视图可能是最好的方法。如果视图在视图层次结构中(具有超级视图),则必须调用 removeFromSuperview 以获取超级视图以释放视图。

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

[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil];
于 2010-05-29T01:48:45.943 回答
14

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

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
于 2011-05-19T15:11:21.540 回答
8

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

[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"];
于 2011-09-14T01:34:09.710 回答
5

就我而言,我需要立即从其内容中清除 Web 视图,并能够立即开始加载其他内容。加载空文档 HTML 字符串或使用 JavaScript 清除页面都不会产生预期的效果。相反,我使用了:

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

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

我希望这对其他人也有帮助。

于 2011-08-31T14:01:20.070 回答
0

我更喜欢以下内容:

[m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"]
于 2013-08-23T05:28:21.370 回答