ios 加载大量图片崩溃_iOS sd_webImage加载大图片时导致内存飙升解决方法
SDWebImage大家肯定都恨熟悉了,国内外太多的App使用其进行图片加载。
但是最近在使用过程中发现,我用SDWebImage加载多个图片,类似微博动态那种,在加载的过程中。我发现当图片分辨率比较大的时候(不是图片大),加载几张图片就崩溃了。
网上说可以每次加载图片清空memcache,但是效果并不好。
[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];
这地方采用的方法是:
第一步:在 UIImage+MultiFormat这个类里面添加如下压缩方法
+(UIImage *)compressImageWith:(UIImage *)image {
float imageWidth = image.size.width;
float imageHeight = image.size.height;
float width = 320;
float height = image.size.height/(image.size.width/width);
float widthScale = imageWidth /width;
float heightScale = imageHeight /height;
// 创建一个bitmap的context
// 并把它设置成为当前正在使用的context
UIGraphicsBeginImageContext(CGSizeMake(width, height));
if (widthScale > heightScale) {
[image drawInRect:CGRectMake(0, 0, imageWidth /heightScale , height)];
}else {
[image drawInRect:CGRectMake(0, 0, width , imageHeight /widthScale)];
}
// 从当前context中创建一个改变大小后的图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// 使当前的context出堆栈
UIGraphicsEndImageContext();
return newImage;
}
第二步: 在下面这个方法里调用压缩方法
+ (nullable UIImage *)sd_imageWithData:(nullable NSData *)data {
if (!data) {
return nil;
}
UIImage *image;
SDImageFormat imageFormat = [NSData sd_imageFormatForImageData:data];
if (imageFormat == SDImageFormatGIF) {
image = [UIImage sd_animatedGIFWithData:data];
}
#ifdef SD_WEBP
else if (imageFormat == SDImageFormatWebP){
image = [UIImage sd_imageWithWebPData:data];
}
#endif
else {
image = [[UIImage alloc] initWithData:data];
image = [[UIImage alloc] initWithData:data];
if (data.length/1024 > 90) {
image = [self compressImageWith:image];
}
UIImageOrientation orientation = [self sd_imageOrientationFromImageData:data];
if (orientation != UIImageOrientationUp) {
image = [UIImage imageWithCGImage:image.CGImage scale:image.scale orientation:orientation];
}
}
return image;
}
第三步:
就是在SDWebImageDownloaderOperation的connectionDidFinishLoading方法里面的:
UIImage *image = [UIImage sd_imageWithData:self.imageData];
NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL];
image = [self scaledImageForKey:key image:image];
NSData *data = UIImageJPEGRepresentation(image, 1);
self.imageData = [NSMutableData dataWithData:data];
最后;再配合 [[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];(图片加载后使用)大功告成,亲测内存基本变化不大,自动释放也来得及
waring!!!注意:这个方法慎用,否则的话你所有的图片都会被压缩以后展示的时候就不清晰了.这个方法的原理是通过压缩图片质量实现的.但是本人认为最好不要采用这个方法.除非你自己在需要加载小图的地方加标志,来告诉sd,这个时候就需要修改sd了大家可以按这个思路进行,但是修改起来可能麻烦.
ios 加载大量图片崩溃_iOS sd_webImage加载大图片时导致内存飙升解决方法相关推荐
- ios 加载大量图片崩溃_iOS超高分辨率图片崩溃解决方法
本文为CocoaChina网友xxg90s投稿 前言: ID作为一款以IM为基础的办公软件,在用户使用过程中,经常会遇到一些超大的或者超高分辨率的图片(以下统一称:大图).基于SDWebImage为基 ...
- docker加载新的镜像后repository和tag名称都为none的解决方法
docker加载新的镜像后repository和tag名称都为none的解决方法 参考文章: (1)docker加载新的镜像后repository和tag名称都为none的解决方法 (2)https: ...
- 加mp4文件后js失效_Jquery方法load之后导致js失效解决方法
Jquery方法load之后导致js失效解决方法 >>>>>>>>>>>>>>>>>>> ...
- vue动图加载图片不能正确显示的解决方法
vue动图加载图片不能正确显示的解决方法 解决核心 代码 运行结果 上次解决过一次,没有记录,后来发现有小伙伴问我这个问题,我今天就顺手记录一下,具体的原因我这里就不详细说, 加载不出来简略的原因是v ...
- iOS 同一页面加载上百张图片,迅速滑动时导致内存暴涨程序崩溃的参考解决方法
本例中项目大致流程是先由客户端拍照或者选择图库中的图片进行上传,然后可以从详情页面中浏览所有上传的图片,由于图片是按照相册进行分类,而每个相册中最多可以有50张照片,极限的情况是详情页面最多可以有20 ...
- android 动画 图片 内存溢出,Android有效解决加载大图片时内存溢出的问题
尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图, 因为这些函数在完成decode后,最终都是通过ja ...
- vue开发 百度地图 加载大量点导致卡顿解决方法(vue+vue-baidu-map+mapv)
造成卡顿原因 及解决方法(解释可能有误!!!) 自行通过F12进入调试窗口,可以发现点标注Marker会以div元素在dom树中渲染出来,需要占用的内存大,渲染慢且大规模的 DOM 操作(会造成重绘或 ...
- 未能加载文件或程序集“XXX.dll”或它的某个依赖项的解决方法
问题: 昨天从开发机拷贝exe程序到测试机上测试时,发现程序一运行就报以下错误:未能加载文件或程序集"A.dll"或它的某一个依赖项.找不到指定的模块. 相关知识: 1.应用程序查 ...
- U3d引擎崩溃、异常、警告、BUG与提示总结及解决方法
此贴会持续更新,都是项目中常会遇到的问题,总结成贴,提醒自己和方便日后检查,也能帮到有需要的同学. 若各位有啥好BUG好异常好警告好崩溃可以分享的话,请多多指教.xuzhiping7#qq.com. ...
最新文章
- uva 11732 - strcmp() Anyone? 不错的Trie题
- python简单代码hello-实现简单的hello/hi程序——python
- 注册表模板-OEM信息自定义
- linux runqueue定义,linux – 了解rt_rq(实时runqueue)内核中数据成员的使用
- linux查cpu命令4可以选择哪些运动,Linux 查看cpu 信息的命令及简单实例
- C语言相反次序重新排序
- python逢7过小游戏_while循环拓展:用python做一个逢七过小游戏
- JavaScript数组实现图片轮播
- html如何导入字体样式表,导入html字体及其样式变体?
- 抗量子加密:为什么你迫切需要它
- 时光倒流软件测试简历,时光倒流 28款数据恢复软件大比拼
- VS 自带DLL注册工具注册Dll
- Unity使用tolua框架教程: LuaFramewrk
- 大家快来看看,心中无女人,写文章自然神。
- Fibonacci数列的递推C语言详解:Fn=Fn-1+Fn-2
- 服务器数据恢复建议_raid磁盘阵列OFFLINE后的应急处理方案
- E - Eddy的难题
- Markdown (CSDN) MD编辑器(一)- 实现页内跳转
- java获取当前时间和求时间差(分钟,秒钟,小时,年等)
- ps考试没有保存html,PS未正常关闭,未保存的文件该怎么恢复
热门文章
- 成为视频分析专家:自动生成集锦的方法(Python实现)
- [ctfshow]入门
- Ubuntu下向日葵连接失败
- 蓝桥杯历届试题:打印十字图
- windows10系统删除本地git记录的账号密码
- 资深互联网运营经理分析微信公众号如何通过内容运营来打动用户
- sw槽钢插件_solidworks焊接型材支架制作实例
- 索尼sw2刷android wear,非索尼手机连接SmartWatch 2 SW2教程
- 10个jQuery HTML5音频播放器
- python超星网课答案_Python机器学习应用_中国大学mooc慕课_章节期末网课答案