Memory UIWebView内存泄漏
我的项目是一个混合静态库,用于显示UIWebView和一些JS来控制逻辑。当我在iOS 8/iPhone 6上使用64位并运行demo时,内存会一直保持在30M或更高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
- 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的应用程序以来,我没有花过他们的时间。很抱歉