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