如何解决 UIWebview js内存泄漏及解决方法

在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
多次加载UIWebView,内存一直得不到释放,一直在增长,网上搜的
在webViewDidFinishLoad方法中设置如下:
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"];//自己添加的,原文没有提到。
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitOfflineWebApplicationCacheEnabled"];//自己添加的,原文没有提到。
[[NSUserDefaults standardUserDefaults] synchronize];
这种方式也没效果啊。。。求大神帮忙
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
把你加载 UIWebView 的代码放出来,你这样的描述,别人很难猜测到问题在哪里的。另外,你是如何确定有内存泄露的?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
建议使用Wk,UIWebView的内存泄漏没有太好的解决方案。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
换WKWebView,UIWebView的内存泄漏,公认的无解。
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。WebView内存泄露优化方案 - 简书
WebView内存泄露优化方案
iOS,内存泄露,UIWebView,three.js
1. 问题提出
使用UIWebView加载three.js制作的3D模型,模型加载大约需要200M左右的内存空间,内存占用不低,但勉强可以接受。
关闭该WebView页面,发现内存并未释放。再次进入该WebView加载模型,内存占用再次增加200MB。来回几次应用崩溃提示Message from debugger: Terminated due to memory issue。很明显,奔溃是由于iOS的UIWebView内存泄露造成的。内存占用情况如下图所示。
UIWebView优化前内存占用
程序崩溃是由于应用占用了过多的内存,内存占用过多是因为UIWebView存在内存泄露的问题,导致内存不能释放。UIWebView的内存问题是我们无法解决的,但可以去优化UIWebView的内存占用问题。
优化方法是关闭WebView页面之前先加载空页面,之后再关闭WebView。
3. 核心代码
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@""]]];
在执行关闭WebView逻辑前,加载空白页面。代码如下:
- (void)closePage
//1、加载空页面
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@""]]];
//2、关闭页面
[self dismissViewControllerAnimated:YES completion:nil];
在MRC下需要关注UIWebView的Delegate引用问题,即UIWebView已经释放,但UIWebView的Delegate未置空导致奔溃的问题。ARC下由于weak语义的存在不需要考虑此问题。
优化后的内存占用情况如下图所示,可以看到虽然没有解决UIWebView的内存泄露,但有效地控制住了随着UIWebView的反复加载造成的源源不断的内存泄露问题。UIWebView内存泄露大约占用了30MB左右的内存,使得应用运行整体占用了50MB左右的内存空间。作为一款iOS平台下的应用,内存占用是偏高的,但对于主流iOS设备来说,30MB左右的内存浪费也是可以接受的。
UIWebView优化后内存占用
iOS平台下的UIWebView内存问题是众所周知的,Apple官方也承认了内存泄露确实存在。因此Apple在iOS8推出了功能和性能都更加强大WKWebView。但出于一些原因WKWebView并未完全替代UIWebView。
对于加载普通网页来说,UIWebView的内存问题体现的并不明显,我们甚至都可以不去关注UIWebView的内存泄露问题,因为在应用因内存问题奔溃之前,用户早已退出了该应用。
但对于本文的实践,UIWebView的内存问题就体现了出来。
内存不足时,系统会发出内存不足的通知。同时也可以在ViewController可以重写- didReceiveMemoryWarning方法,来释放一些不用的资源。
但该方法不是万能的,对于短时间内内存急剧增长的情况,内存不足的方法还未来得及调用程序就已经奔溃了。
还有如本文的情况,UIWebView是当前正在使用的资源,当然不能对其进行释放。
发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注
09:45字数 61697阅读 3316评论 2喜欢 85 用到的组件 1、通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FM...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
AFNetworking网络请求组件SDWebImage多个缩略图缓存组件FMDB本地数据库组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBProgressHUD一款提示框第三方库MWPhotoBr...
“主要看气质”在2015年底蹿红。起因是一位台湾女歌手为配合新专辑的发行,在微博上发布了一张吃汉堡的宣传照,一改以往的甜美线路而带有大量搞怪元素。
网友纷纷留言评论,其中一个“主要看气质”的留言获得了大量赞同,认为即使是搞怪照片也难掩饰该歌手的独特气质,于...
教育孩子,是18年的修炼呢, 孩子在长,我们也要成长,否则,老办法肯定无法面对新问题。 人有三种角色: 梦想家:有远大的计划和梦想,比如要去喜马拉雅,要改变全人类 批评家:他们总是批评梦想家的理想:“这太荒谬了”, “这太可笑了” , “别人也许可以,就凭你?” “这个项目...
昨晚写到了很晚,早上起来浑浑噩噩地冲了杯咖啡,刚打开电脑想写点什么,就接到了小君的电话:“橙子,我又成了一个人,还好有你告诉我的那句话:你的孤独,虽败犹荣。” 在我的印象中,小君像拥有双性人格的女孩子。有时可以去酒吧与我嗨舞,有时也会一个人坐在吧台买醉;有时和朋友们一起做些...
为什么要给孩子讲睡前故事? 文 / 年若 相信很多妈妈和我一样,都有讲晚安故事的习惯。 或者没有这个习惯的妈妈,也一定听说过、计划过这样的事情。 睡前讲个故事,感觉像是给孩子的一个仪式感,和一个睡觉的信号,即便你不说出来,他也会明白:“讲完这个故事就要睡觉了。” 讲故事这件...
01 大学的时候,爱美的心慢慢蔓延,感觉高跟鞋特别有魅力,进入大一,第一次和舍友去逛街就买了一双高跟鞋。 至今我都记得那双高跟鞋的样子,特别好看,鞋跟是八厘米左右的。 买回去之后,在宿舍试穿了无数次。 终于在下一次出门逛街的时候,我穿了这双高跟鞋出门。 没想到才刚走到校门口...&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
UIWebView内存泄露问题解决方法(ios自学笔记)
摘要:关于iOS的UIWebView内存泄露的问题,以前也碰到过这个问题,解决方法就是设置NSURLCache大小。因为iOS当中的网络通讯默认都是通过NSURLConnection来实现的。所以UIWebView内部通讯也是通过NSURLConnection来下载网页资源的。-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions
关于iOS的UIWebView内存泄露的问题,以前也碰到过这个问题,解决方法就是设置NSURLCache大小。因为iOS当中的网络通讯默认都是通过NSURLConnection来实现的。所以UIWebView内部通讯也是通过NSURLConnection来下载网页资源的。
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{& & int cacheSizeMemory = 1*; // 4MB& & int cacheSizeDisk = 5*; // 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 =[_webView loadHTMLString:@&& baseURL:nil];[_webView stopLoading];[_webView removeFromSuperview];[[NSURLCache sharedURLCache] removeAllCachedResponses];[_webView release];
这么做基本上效果不是很大
看到一篇国外的Blog文章,找到我想要的答案。
原文地址是:http://blog.techno-barje.fr//post//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来设置。
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
新用户大礼包!
现在注册,免费体验40+云产品,及域名优惠!
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
UIWebView内存泄露问题解决方法(ios自学笔记)相关信息,包括
的信息,所有UIWebView内存泄露问题解决方法(ios自学笔记)相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
InternationaliOS 有内存泄露 但是找不到泄露的地方。
[问题点数:20分]
本版专家分:0
CSDN今日推荐
本版专家分:0
本版专家分:60
匿名用户不能发表回复!|
其他相关推荐如何解决 UIWebview 内存泄漏_百度知道
如何解决 UIWebview 内存泄漏
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
:leak app下载下来,打开运行,程序是一个寿司的列表
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 java内存泄漏怎么解决 的文章

 

随机推荐