最近做的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];
这个方法。