Memory UIWebView内存泄漏

Memory UIWebView内存泄漏,memory,uiwebview,dealloc,Memory,Uiwebview,Dealloc,我的项目是一个混合静态库,用于显示UIWebView和一些JS来控制逻辑。当我在iOS 8/iPhone 6上使用64位并运行demo时,内存会一直保持在30M或更高 当我在instrument中使用generation时,增加的内存使用几乎全部来自webcore;这是否意味着JS代码中存在漏洞?当我使用Safari直接运行类似的JS时,我找不到漏洞 当我释放UIWebView时,内存仍然没有释放;我测试了仪器配置。内存中还有一些webcore和(非对象)文件,我可以做些什么来释放它们 0Ja

我的项目是一个混合静态库,用于显示UIWebView和一些JS来控制逻辑。当我在iOS 8/iPhone 6上使用64位并运行demo时,内存会一直保持在30M或更高

  • 当我在instrument中使用generation时,增加的内存使用几乎全部来自webcore;这是否意味着JS代码中存在漏洞?当我使用Safari直接运行类似的JS时,我找不到漏洞

  • 当我释放UIWebView时,内存仍然没有释放;我测试了仪器配置。内存中还有一些webcore和(非对象)文件,我可以做些什么来释放它们

    • 0JavaScriptCore WTF::MallocHook::recordAllocation(无效*,无符号长)
    • 1 JavaScriptCore WTF::fastMalloc(无符号长)
    • 2 WebCore WebCore::SharedBuffer::buffer()常量
    • 3 WebCore WebCore::SharedBuffer::data()常量
    • 4 WebCore WebCore::ResourceLoader::didReceiveDataOrBuffer(char const*,unsigned int,WTF::PassRefPtr,long-long,WebCore::DataPayloadType)
    • 5 WebCore WebCore::SubresourceLoader::didReceiveDataOrBuffer(char const*,int,WTF::PassRefPtr,long-long,WebCore::DataPayloadType)
    • 6 WebCore WebCore::SubresourceLoader::didReceiveBuffer(WTF::PassRefPtr,long-long,WebCore::DataPayloadType)
    • 7 WebCore WebCore::ResourceLoader::didReceiveBuffer(WebCore::ResourceHandle*,WTF::PassRefPtr,int)
    • 8 WebCore WebCore::SynchronousResourceHandleFurlConnectionDelegate::didReceiveDataArray(\uu CFArray const*)
  • 我使用以下代码

    -(void)createUIWebview{
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:serviceUrl]]];
    }
    
    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
    [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
    }
    
    -(void)dealloc{
    if (_webView.isLoading){
        [_webView stopLoading];
    }
    [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
    _webView.delegate=nil;
    [_webView removeFromSuperview];
    [_webView release];
    _webView = nil;
    }
    
    我已经研究了以下链接,但它们似乎不能解决我的问题。 iOS 8中的UIWebview是否仍在泄漏?当我在iPhone4中使用iOS 6时,问题似乎并不那么明显


    我遇到了同样的问题,并切换到新的
    WKWebView
    ,它立即解决了我看到的所有内存泄漏问题
    WKWebView
    共享来自
    UIWebView
    的许多相同调用名,因此我在项目中所要做的就是将所有“UIWebView”对象切换到“WKWebView”,内存泄漏就消失了

    请记住将
    WebKit
    导入到您的项目中,并知道它仅在
    iOS8
    上可用


    我遇到了类似的问题,用户通过在UIWebView中预览图像来测试应用程序。该应用程序将在N次预览后崩溃。使用Apple Instruments工具和配置分析模板。通过该工具,我可以选择以下分配生命周期:“创建并持久化”。进一步的观察是,当多次预览同一文件时,持久字节数(根据苹果的定义,这是已分配但未释放的字节数)。对于ImageIO_jpeg_数据以双倍的速度增长,对于任何其他图像类型都是如此


    解决方法是使用苹果的UIImageView作为单独的图像预览器,这在预览图像时不会导致内存泄漏。

    WKWebView
    不是继承自
    UIWebView
    ,它是一个全新的类。如果您只使用iOS 8,那么您肯定应该在
    UIWebView
    上使用它。您还应该使用ARC。@jshier-谢谢您的帮助。。。我根据我想说的内容编辑了答案(它们共享许多相同的方法调用名称,这使得切换非常容易)。非常感谢您的解决方案,WKWebView适用于我的案例!那么,如果我们需要支持iOS 7,解决方案是什么呢??我尝试过缓存和其他解决方案,但没有成功。我同意wkwebview在iOS 8I上运行得很好。自从我构建了一个仅限iOS 8的应用程序以来,我没有花过他们的时间。很抱歉