使用后释放iOS UIWebView资源

我们的应用程序的主屏幕(因此是所有用户首次看到的)有几个部分,其中大部分包含用户可能想要打开的不同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; 

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

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

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

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

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

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

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

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

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

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

 -(void) dealloc { [self.webview cleanForDealloc]; self.webview = nil; [super dealloc]; } 
 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) categoryWebView.stopLoading() categoryWebView.removeFromSuperview() categoryWebView = nil URLCache.shared.removeAllCachedResponses() URLCache.shared.diskCapacity = 0 URLCache.shared.memoryCapacity = 0 if let cookies = HTTPCookieStorage.shared.cookies { for cookie in cookies { HTTPCookieStorage.shared.deleteCookie(cookie) } } }