我的项目是一个混合静态库,用于显示带有一些JS来控制逻辑的UIWebView。当我在iOS 8 / iPhone 6上使用64位并运行demo时,内存将保持在30M或更高!
当我在乐器中使用世代时,增加的内存使用量几乎全部来自webcore;这是否意味着JS代码中存在泄漏?当我使用Safari直接运行类似的JS时,我找不到泄漏。
当我发布UIWebView时,内存仍未释放;我用仪器分配测试了。内存中还有一些webcore和(非对象),我可以做些什么来释放它们?
我使用以下代码。
-(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;
}
我研究了以下链接,但它们似乎没有解决我的问题。 UIWebview在iOS 8中仍然存在泄漏吗?当我在iPhone4中使用iOS 6时,问题似乎并不那么明显。
Whats the proper way to release a UIWebView?
iOS 8 UIWebView memory management
答案 0 :(得分:6)
我遇到了同样的问题,并切换到新的WKWebView
,它立即解决了我看到的所有内存泄漏问题。 WKWebView
从UIWebView
共享许多相同的调用名称,因此我在项目中所做的就是将所有`UIWebView'对象切换为'WKWebView',并且内存泄漏消失了。
请务必将WebKit
导入您的项目,并知道该项目仅在iOS8
上提供。
答案 1 :(得分:0)
我遇到了类似的问题,让用户通过在UIWebView中预览图像来测试应用程序。 N预览后应用程序会崩溃。使用Apple Instruments工具和分配概要分析模板。通过该工具,我可以选择以下分配寿命:"创建&持久&#34 ;.进一步的观察是多次预览同一个文件,持久字节(基于苹果定义,这是已经分配但未释放的字节数)。对于ImageIO_jpeg_Data,在双打中保持增长,对于任何其他图像类型都是如此
对此的解决方案是使用Apple的UIImageView作为图像的单独预览器,这在预览图像时不会造成任何内存泄漏。