使用后释放iOS UIWebView资源

h4l*_*c0n 28 memory uiwebview ios

我们的应用程序的主屏幕(因此是所有用户首次看到的)有几个部分,其中大部分包含用户可能想要打开的不同webview.这样做可以将内存使用量从仅仅26MB增加到85MB甚至更多(打开所有不同的webview后).

我们发现的问题是,一旦它们关闭,所有网页资源似乎都保存在内存中(使用的内存几乎不会减少几MB).

我想释放webview必须打开的资源,因为,稍后,我们的应用程序中有一个非常苛刻的部分需要大量内存并且如果你碰巧浏览了几个这样的网页浏览器会完全崩溃应用程序之前.

我在互联网上找到了几个选项,但到目前为止它们都没有.事情如:

// Try to clean used webview

[self.webView loadHTMLString:@"" baseURL:nil];
[self.webView stopLoading];
self.webView.delegate = nil;
[self.webView removeFromSuperview];
self.webView = nil;
Run Code Online (Sandbox Code Playgroud)

它们对内存使用几乎没有任何影响.这里有什么我想念的吗?我已经仔细检查过我没有泄漏可以保持WebView打开,我已经释放了我对它的唯一引用(self.webView = nil;)

编辑:我刚从头创建了一个项目,添加了一个webview和一个按钮,每次点击它时都会加载一个不同的web,这反过来会增加内存使用量.我还添加了一个按钮,在点击时会破坏webview,并猜测,内存保持不变,就像它实际上没有释放任何资源一样.

h4l*_*c0n 18

自从我提出这个问题已经过去几个月了,似乎没有人知道任何工作,所以我只是回答自己要给它一些关闭,对于遇到同样问题的人来说,这是个坏消息.

我们一直试图解决这个问题好几天,在与某些人暗示我们与之无关之后(这只是一个不同的过程照顾我们无法访问的一切),我们决定限制webview访问自定义页面.

例如,我们有一个新闻栏目,在互联网上打开网站.我们最终做的是开放的定制网页,其中包含标题,正文和与新闻相关的图像(这仍然增加了资源内存的使用,但我们设法将其保持在一个包含的小格式中,需要数千个要打开的新闻有任何危险).我知道,不理想.

我仍然希望看到这个问题的一些建设性的答案,无论是解决方案,解决方案,还是任何可以帮助未来用户解决这个问题的想法都有关于如何处理它的线索.

  • 该死的,也就是这个墙.说真的,Apple,你认真吗? (2认同)

2in*_*tor 7

你应该阅读杰森贝克的这篇文章,

http://www.codercowboy.com/code-uiwebview-memory-leak-prevention/

他创建了一个category真正帮助我重新调整UIWebView内存占用的方法.

你只需要在添加类别后调用两行

-(void) dealloc
{

    [self.webview cleanForDealloc];
    self.webview = nil;
    [super dealloc];

}
Run Code Online (Sandbox Code Playgroud)

  • 是的,我已经尝试过了.这就是我可以尝试的选项,但它并没有真正起作用.我会再给它一个干净的项目,看看是否会让事情变得与众不同.谢谢 (2认同)