问题####
在使用UIWebView加载url的时候我们会发现内存暴增,我测试了一下一个最简单的webView加载url的页面一般会增加30M左右的内存。
那如何解决这个问题呢?网上你去查的时候一般就以下几种方法:
- (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];
}
然而这些方法并没有什么卵用,内存基本上还都在那里,没有被释放。
这是UIWebView的问题,好像根本没有办法能解决。
如何解决####
iOS8 WebKit中更新的WKWebView控件,它很好的解决了UIWebView存在的内存、加载速度等诸多问题。
具体的使用和介绍可以看WKWebView的新特性与使用
由于WKWebView是支持iOS8以上的,如果要适配iOS7怎么办呢?
IMYWebView这个项目可以简单的实现iOS7的时候无缝切换到UIWebView
网友评论