問題####
在使用UIWebView加載url的時(shí)候我們會發(fā)現(xiàn)內(nèi)存暴增,我測試了一下一個最簡單的webView加載url的頁面一般會增加30M左右的內(nèi)存。
那如何解決這個問題呢?網(wǎng)上你去查的時(shí)候一般就以下幾種方法:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"];//自己添加的,原文沒有提到。
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitOfflineWebApplicationCacheEnabled"];//自己添加的,,原文沒有提到。
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (void)dealloc
{
[webView loadHTMLString:@"" baseURL:nil];
[webView stopLoading];
[webView removeFromSuperview];
webView = nil;
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
NSLog(@"釋放了webview");
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
int cacheSizeMemory = 4*1024*1024; // 4MB int
cacheSizeDisk = 32*1024*1024; // 32MB
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
[NSURLCache setSharedURLCache:sharedCache];
}
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
[[NSURLCache sharedURLCache] removeAllCachedResponses];
}
然而這些方法并沒有什么卵用,內(nèi)存基本上還都在那里,沒有被釋放。
這是UIWebView的問題,好像根本沒有辦法能解決。
如何解決####
iOS8 WebKit中更新的WKWebView控件,它很好的解決了UIWebView存在的內(nèi)存、加載速度等諸多問題。
具體的使用和介紹可以看WKWebView的新特性與使用
由于WKWebView是支持iOS8以上的,如果要適配iOS7怎么辦呢?
IMYWebView這個項(xiàng)目可以簡單的實(shí)現(xiàn)iOS7的時(shí)候無縫切換到UIWebView