本文**至:
ios5
webkit
測試cache
ios在ios5平台開發應用的過程中,發現使用uiwebview通過nsurlrequest載入網頁後,即使uiwebview所在畫面關閉,仍然有記憶體無法釋放。
結果就是,通過uiwebview訪問的頁面越多,應用的記憶體占用也越多,從而有導致記憶體警告而造成程式退出的可能。
通過調查網上的相關資料,發現uiwebview的記憶體問題由來已久,在ios4時代就已經存在。
- (void)webviewdidfinishload:(uiwebview *)webview
在畫面結束時讓uiwebview載入空白頁面:
[webview loadhtmlstring:@"" baseurl:nil];
[webview stoploading];
[webview setdelegate:nil];
[webview removefromsuperview];
[[nsurlcache sharedurlcache] removeallcachedresponses];
但經過實機測試,發現並沒有什麼效果。
網路上大部分開發者的意見是,目前uiwebview的記憶體問題出在 webkit裡,開發者仍舊沒有很好的解決辦法。
隨後發現了另一種變相的解決方式,既然無法阻止記憶體佔用量的持續上公升,就把它控制在一定的範圍以內並及時清空。
具體的方式如下:
int cachesizememory = 4*1024*1024; // 4mb
int cachesizedisk = 32*1024*1024; // 32mb
nsurlcache *sharedcache = [[[nsurlcache alloc] initwithmemorycapacity:cachesizememory diskcapacity:cachesizedisk diskpath:@"nsurlcache"] autorelease];
[nsurlcache setsharedurlcache:sharedcache];
同時追加記憶體警告時的處理:
經實機測試,的確會降低系統記憶體的用量,但應用本身的記憶體佔用量沒有大的變化。
以上調查結果,僅供參考。
優化JS引起UIWebview的記憶體洩露
在開發中遇到了uiwebview記憶體 問題,由於頁面主要是由js載入,引發了記憶體洩露.使用下面方法基本沒有作用 並且在收到記憶體警告的時候,清除快取內容。這些措施主要是 uiwebview的快取,但是無法清除由於js引起的記憶體洩露,後來翻牆查詢到一種解決辦法 在webviewdidfinish...
05 UIWebView 記憶體洩漏問題
問題描述 import 定義屬性 property strong,nonatomic uiview webview 懶載入 uiview webview return webview 方法呼叫 void showwebview nsstring url 注意點 if os version 8是編譯時...
使用UIWebView開發hybrid應用(二)
使用uiwebview開發hybrid應用 一 hybrid應用中,快取處理是比較棘手的。objective c有快取的類nsurlcache,官方給出的解釋是 it provides a composite in memory and on disk cache。也就是說,當應用關閉後,快取就失效...