iOS UIWebView内存泄露问题

作者: 齐滇大圣 | 来源:发表于2016-02-19 13:57 被阅读4846次

问题####

在使用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

相关文章

网友评论

本文标题:iOS UIWebView内存泄露问题

本文链接:https://www.haomeiwen.com/subject/fufvkttx.html