我目前有一个在模态视图中显示的UIWebView。它基本上是一个详细视图,提供用户单击链接时的页面视图。当视图被取消然后再次启动时(当用户单击另一个链接时),先前加载的内容仍然可见,并且新内容加载到最后一个内容的“顶部”。这是有道理的,因为UIWebView的实例在会话之间持续存在,并且仅在需要内存时才会释放。
但是,当模态视图被解除时,我想完全清除UIWebView,以便1)内容被清除,2)内存被释放。到目前为止,我的研究和尝试都没有找到答案。这些链接对我没用:
我已尝试[[NSURLCache sharedURLCache] removeAllCachedResponses];
并将webView设置为nil并在模态视图关闭时手动释放webView无效。来自干瘪群众的任何想法?
答案 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')"]