【问题标题】:is it possible to free memory of UIWebView?是否可以释放 UIWebView 的内存?
【发布时间】:2011-01-12 04:25:17
【问题描述】:

我正在尝试释放 UIWebView 对象,但它没有释放内存。 有什么原因吗?

【问题讨论】:

    标签: iphone memory-management uiwebview


    【解决方案1】:

    也许清除缓存可能会有所帮助?见NSURLCache类。

    【讨论】:

    • [[NSURLCache sharedURLCache] removeAllCachedResponses];
    • 我试试你的代码,但它没有释放内存。感谢您的回复
    【解决方案2】:

    仅仅因为你已经发布了它并不意味着它可以被发布 - 也许它正在被其他东西使用?

    释放后它的保留计数是多少?

    [myWebView release];
    NSLog(@"%i", [myWebView retainCount]);
    

    如果此数字不为 0,则其他人也在保留它,并且在他们也释放它之前无法释放它(或者它被设置为自动释放,因此它会在未来的某个时候消失)。

    另一种可能性是,使用的内存位于某种共享库中,该库在创建 Web 视图时被加载 - 您可能无法控制如何卸载它。

    山姆

    PS 我假设你也完成了[myWebView removeFromSuperview]; - 将自己添加到视图中会留住你。

    【讨论】:

    【解决方案3】:

    在释放 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 内完成的那些)。

    【讨论】:

      猜你喜欢
      • 2014-11-17
      • 2016-02-09
      • 2012-06-19
      • 1970-01-01
      • 2016-02-06
      • 2013-07-18
      • 2017-03-11
      • 2011-01-04
      • 1970-01-01
      相关资源
      最近更新 更多