为了寻找系统中其他地方的内存泄漏,我创建了一个带有元刷新标签的 20 MB 网页。我们的想法是通过我们的数据路径代码移动大量数据以确认内存稳定性。
<html>
<meta http-equiv="refresh" content="1">
<body>
<div style="border: 1px solid red">
Content loading
</div><!-- 20mb worth of comments -->
</body>
</html>
我发现 uiwebview 显示元刷新页面泄漏内存非常非常快。即使我们的代码没有运行,应用程序内存在大约 2 分钟内就会达到 300mb,并会出现内存不足警告。
我已停止刷新加载并尝试解除分配网络视图。
我尝试过loadurl:“about:blank”,loadhtml:“”,javascript文档关闭。
我还尝试编写一个递归的removeFromSuperview和removeFromParentViewController,读到webview中的私有滚动视图是一个内存问题,但该内存永远不会被释放。我似乎无法找到一种可靠的方法来关闭,当我们完成它时释放它。
我们已经忍受了 webview 泄漏速度很慢的情况相当长一段时间了,并且真的希望找到一种方法来确保 webview 在我们使用完后能够被完全清理。我们最近将应用程序转换为 ARC,这并没有改变内存速率。
我正在考虑尝试对网络视图中的所有对象进行递归循环,看看是否可以释放它们。每次刷新 20MB 页面时,instruments 都会显示 20MB 的 cfdatas,但不会将其显示为泄漏。如果我只传递响应标头并完成到 urlprotocol 客户端,我们就能稳定运行,因此可以确认数据路径其余部分中的 memleaks,但这是一个如此戏剧性的测试用例结果,我希望能找到一次 webview mem 泄漏解决方案并为所有人。
有谁有更好的想法或者有人尝试过递归 uiwebview 中的对象吗?
我消除 UIWebView 内存泄漏的方法是将其 HTML 设置为空字符串。执行此操作的一个地方是当包含 Web 视图的视图控制器消失时:
- (void) viewWillDisappear:(BOOL)animated {
if (self.isMovingFromParentViewController) {
[self.wv loadHTMLString: @"" baseURL: nil];
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)