UIWebView内存问题

来源:互联网 发布:冰球规则知乎 编辑:程序博客网 时间:2024/05/16 18:28

最近做的demo,设计到电子书展示的部分,我的电子书是epub3.0的模式,设计到html的加载,由于3.0后html中可以加载很多资源,致使一个html网页非常的大。我的一个webView的高度最高可以有16000多像素,我的demo是两个webView循环加载。致使内存占有量很大。运行时发现总是内存不足而崩溃。在网上搜索的很久,发现webView的加载的数据是无法被真正释放的,也就是说当webView调用release时,内存其实没有被释放掉。

现在大家比较管用的方法是在 - (void)applicationDidReceiveMemoryWarning:(UIApplication*)application;

这个方法中添加     [[NSURLCache sharedURLCache] removeAllCachedResponses]; 对缓存进行清除,

并在释放webView时填下如下的代码:

_webView.delegate = nil;
[_webView loadHTMLString:@"" baseURL:nil];
[_webView stopLoading];
[_webView removeFromSuperview];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[_webView release];

但是效果甚微。

我从一篇技术博客上看到,在调用JS代码时,会出现一个内存泄露,会将WebKitCacheModelPreferenceKey这个属性置成1;

我的demo中通过JS实现很多OC 和HTML的双向交互,所以JS调用很频繁。

所以要在JS调用结束后 调用,

 [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];

 [[NSUserDefaults standardUserDefaults] synchronize];

这个方法。

同时主要在频繁调用webView 的loadRequest的方法时,请先调用下stopLoading
0 0