UIWebView内存泄露问题解决方法(ios自学笔记)

转载 2015年07月09日 11:28:50

关于iOS的UIWebView内存泄露的问题,以前也碰到过这个问题,解决方法就是设置NSURLCache大小。因为iOS当中的网络通讯默认都是通过NSURLConnection来实现的。所以UIWebView内部通讯也是通过NSURLConnection来下载网页资源的。

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    int cacheSizeMemory = 1*1024*1024; // 4MB
    int cacheSizeDisk = 5*1024*1024; // 32MB
    NSURLCache *sharedCache = [[[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"] autorelease];
    [NSURLCache setSharedURLCache:sharedCache];
}

并且在收到内存警告的时候,清除缓存内容。

- (void)applicationDidReceiveMemoryWarning:(UIApplication*)application
{
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
}


以及在释放UIWebView的时候

_webView.delegate = nil;
[_webView loadHTMLString:@"" baseURL:nil];
[_webView stopLoading];
[_webView removeFromSuperview];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[_webView release];


这么做基本上效果不是很大

看到一篇国外的Blog文章,找到我想要的答案。

原文地址是:http://blog.techno-barje.fr//post/2010/10/04/UIWebView-secrets-part1-memory-leaks-on-xmlhttprequest/

Html当中的js代码会引起内存泄露的问题。

var xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      // Do whatever you want with the result
    }
  };
  xmlhttp.open("GET", "http://your.domain/your.request/...", true);
  xmlhttp.send();


解决这个问题的方法是在webViewDidFinishLoad方法中设置如下:

    [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"];//自己添加的,原文没有提到。
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitOfflineWebApplicationCacheEnabled"];//自己添加的,原文没有提到。
    [[NSUserDefaults standardUserDefaults] synchronize];


关于NSUserDefaults的另类用法还有比如设置UserAgent也可以通过NSUserDefaults来设置。

iOS实战演练之UIWebView无法显示问题

今天在做一个小demo的时候(ps:点击按钮时UIWebView显示该按钮代表的网站),发现UIWebView无法正常使用,下面是代码: ViewController.h:#import @int...
  • yxys01
  • yxys01
  • 2016年06月20日 14:40
  • 1754

播放与暂停UIWebView中视频,并获取的长度与播放进度,

转自: http://blog.sina.com.cn/s/blog_63b4ee0d0101gd0s.html 如有侵犯,请来信oiken@qq.com 碰到一个需求,需要获取w...
  • oiken
  • oiken
  • 2015年10月05日 20:42
  • 1271

隐藏TabBar后,UIWebView加载过程中和加载失败时,底部出现黑边的问题解决

描述 我的应用里同时使用了 TabBar 和 Navigation Bar,由于原本的 TabBar 不能满足我的外观效果要求,我用自定义的 view 实现了一个 TabBar 的外观,隐藏了原...
  • fangzhangsc2006
  • fangzhangsc2006
  • 2013年06月13日 16:17
  • 3350

iOS 全局禁止横屏,但UIWebView 全屏横屏播放视频的解决办法

转自:http://www.cnblogs.com/fengtengfei/p/4646562.html 如有侵犯,请来信oiken@qq.com 我参考这个设法实现了自己的需求,下一篇文章会...
  • oiken
  • oiken
  • 2015年09月27日 23:09
  • 711

IOS开发 - UIWebView(用法全面介绍,含最全的JS交互)

前两天我写了一套关于JS与OC交互的三种方法的文章,但是发现自己对UIWebView理解的还是比较浅,一直认为只能简单的当一个webView来使用,具体很多细节都忽略,如果想看我之前UIWebView...
  • sheng_bin
  • sheng_bin
  • 2016年11月10日 22:36
  • 3697

Hibernate自学详细笔记

Hibernate详细自学笔记,初学者快来看看吧!!!!
  • wangyang1354
  • wangyang1354
  • 2015年08月31日 21:23
  • 1245

【IOS开发】UIWebview 的缓存策略和验证,以及 web 相关

加载慢 缓存保证能够获得最新的文件 网络的检测确保正确 添加加载进度条 缓存策略(以科学的方法验证想法,以保证质量) NSURLRequestCachePolicy NSURL...
  • mangosnow
  • mangosnow
  • 2014年07月15日 21:34
  • 24541

iOS 给UIWebView添加头视图和尾视图

// //  WebView.m //  标签 // //  Created by TK on 15/11/24. //  Copyright (c) 2015年 TK. All right...
  • TK_Xcode
  • TK_Xcode
  • 2015年11月24日 16:32
  • 2177

UIWebView加载自签名Https网页

ATS设置 按照惯例写一个UIWebView,用来加载网页: _webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.vie...
  • dkq972958298
  • dkq972958298
  • 2016年11月10日 14:36
  • 1816

iOS UIWebView 全属性详解(苹果官方文档翻译整理)

iOS UIWebView 全属性详解(苹果官方文档翻译整理)前言我这次之所以特意对这个看起来比较稀松平常的控件进行详细说明呢,是基于这么几点考虑的:首先,我们都知道这段时间HTML5是特别的火,对于...
  • LL845876425
  • LL845876425
  • 2016年07月11日 22:59
  • 6946
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UIWebView内存泄露问题解决方法(ios自学笔记)
举报原因:
原因补充:

(最多只允许输入30个字)