iOS UIWebView内存泄露问题

问题####

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • UIWebView内存消耗过多解决方法 在iOS开发时,使用UIWebView 来加载显示一个网页是比较常见的情况...
    husky_duang阅读 17,044评论 0 3
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,207评论 4 61
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 24,284评论 8 183
  • 问题一: 节选读下来,大意都懂,细品略微吃力。而我的方向是写古风的玄幻小说,综合考虑下来,打算读文言4成 ,旧小说...
    水金兔阅读 1,339评论 1 0
  • Java通过程序中建立String类可以轻松管理字符串。字符串是一个或多个字符组成的连续序列,程序需要存储的大量文...
    残月雨纷纷阅读 3,229评论 0 1