UIWebView內存問題

最近做的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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章