【发布时间】:2011-01-12 04:25:17
【问题描述】:
我正在尝试释放 UIWebView 对象,但它没有释放内存。 有什么原因吗?
【问题讨论】:
标签: iphone memory-management uiwebview
我正在尝试释放 UIWebView 对象,但它没有释放内存。 有什么原因吗?
【问题讨论】:
标签: iphone memory-management uiwebview
也许清除缓存可能会有所帮助?见NSURLCache类。
【讨论】:
仅仅因为你已经发布了它并不意味着它可以被发布 - 也许它正在被其他东西使用?
释放后它的保留计数是多少?
[myWebView release];
NSLog(@"%i", [myWebView retainCount]);
如果此数字不为 0,则其他人也在保留它,并且在他们也释放它之前无法释放它(或者它被设置为自动释放,因此它会在未来的某个时候消失)。
另一种可能性是,使用的内存位于某种共享库中,该库在创建 Web 视图时被加载 - 您可能无法控制如何卸载它。
山姆
PS 我假设你也完成了[myWebView removeFromSuperview]; - 将自己添加到视图中会留住你。
【讨论】:
在释放 UIWebView 时,有很多技巧(请查看 original post 了解其他一些技巧)可能有助于清理尽可能多的内存。不幸的是,它们从未完全释放所使用的内存。通常对我来说效果更好的一种方法是在发布之前清空 WebView 的 HTML 文档。
// Empty the HTML document. This hack free some additional memory
[webview stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML='';"];
但我从未完全释放 Web 组件使用的内存:(
另外,如果你也想清除 URLcache,你可以尝试用这个调用来清除它:
// remove all cached responses
[[NSURLCache sharedURLCache] removeAllCachedResponses];
这将清除 App 用于任何 URLRequest 的 sharedURLCache(包括在 UIWebView 内完成的那些)。
【讨论】: