iOS-关于缓存【SDImageCache】Image,一直刷新UIImageView内存一直增加问题
********
最近做的一个项目,里面有这样一个需求,在一个页面,用一个UIImageView不停的刷新显示图片,图片可能会重复显示;图片是从服务器下载下来的data流,data转UIimage系统的方法:
UIImage *image = [UIImage imageWithData:data];
这个方法并不好,用过 SDWebImage 的都知道为什么不好,既然图片是服务器下载,而且图片可以重复,那就用 SDWebImage 做缓存,下次请求可以用图片唯一标示先从本地拿,如果有,就不用再请求,直接返回就行,下面是图片下载成功后返回的 responseObject data流 :
UIImage *responseImage = [UIImage sd_imageWithData:responseObject];
[[SDImageCache sharedImageCache] storeImage:responseImage forKey:@"imageKey-图片唯一标示" completion:nil];
缓存过后,我再用 responseImage 赋值给 UIImageView 的image :
imageView.image = responseImage;
然后开始测试,接着就发现了一个问题,再请求切换图片时【图片不重复】,运行内存一直在增加,当我把 imageView.image = responseImage; 这行注释掉之后,内存一切正常;发现如果将请求拿到的 responseImage 直接赋值给 imageView 就出出现这个内存暴涨问题,接着我做了以下修改,拿到 responseImage 并将其缓存如本地后,再用 SDImageCache 取出来一个缓存过的新UIIImage:imageResponseCache,再将 imageResponseCache 赋值给 imageView:
UIImage *responseImage = [UIImage sd_imageWithData:responseObject];
[[SDImageCache sharedImageCache] storeImage:responseImage forKey:@"imageKey-图片唯一标示" completion:nil];
UIImage *imageResponseCache = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:@"imageKey-图片唯一标示"];
imageView.image =imageResponseCache;
通过上述实现,内存一切正常。
********
多图下载简易处理
+ (void)downloadImages:(NSArray<NSString *> *)imgUrlArray
completion:(void(^)(void))completionBlock{
__block NSInteger count = ; SDWebImageDownloader *manager = [SDWebImageDownloader sharedDownloader];
manager.downloadTimeout = ;
for(int i=; i< imgUrlArray.count;i++) {
NSString *imgUrl = [imgUrlArray objectAtIndex:i]; [manager downloadImageWithURL:[NSURL URLWithString:imgUrl]
options:SDWebImageDownloaderUseNSURLCache|SDWebImageDownloaderScaleDownLargeImages
progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) { } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
if(finished){
count = count + ;
if(!error && image){
[[SDImageCache sharedImageCache] storeImage:image forKey:imgUrl toDisk:YES completion:nil];
// NSLog(@"下载成功 %ld=%@",count,imgUrl);
}
else{
// NSLog(@"下载失败 %ld=%@",count,imgUrl);
}
if(count == imgUrlArray.count) {
// NSLog(@"全部下载完成");
//全部下载完成
return completionBlock();
}
}
}];
}
}
iOS-关于缓存【SDImageCache】Image,一直刷新UIImageView内存一直增加问题的更多相关文章
- iOS: 学习笔记, 使用performSelectorOnMainThread及时刷新UIImageView
在iOS中, 界面刷新在主线程中进行, 这导致NSURLSession远程下载图片使用UIImageView直接设置Image并不能及时刷新界面. 下面的代码演示了如何使用 performSelect ...
- iOS图片缓存框架SDWebImage
本文转发至: http://blog.csdn.net/uxyheaven/article/details/7909373 http://www.cocoachina.com/ios/20141212 ...
- iOS 清除缓存
iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒.它包含三个文件夹: Documents: 苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下 ...
- iOS网络图片缓存详解
在开发移动应用的时候比如Android,IOS,因为手机流量.网速.内存等这些因素,当我们的移动应用是针对互联网,并要频繁访问网络的话,对网络优化这块就显得尤为重要了. 比如某个应用要经常显示网络图片 ...
- vue 缓存的keepalive页面刷新数据
用到这个的业务场景是这样的: a页面点击新建列表按钮进入到新建的页面b,填写b页面并点击b页面确认添加按钮,把这些数据带到a页面,填充到列表(数组),可以添加多条, 点击这条的时候进入到编辑页面,确认 ...
- iOS 通用缓存:HanekeSwift
iOS 通用缓存:HanekeSwift Haneke 是个采用 Swift 编写的轻量级 iOS 通用缓存.示例: 初始化一个数据缓存: let cache = Cache<NSData> ...
- iOS笔记-(缓存机制的理解与实现)
(1)运行中的现象: 在iOS开发中,会遇到:同一NSURL被多次请求,会造成用户的流量浪费,程序的响应速度不够快.比如说,从服务器上请求一张图片,请求100次,下载的结果都是一样的. (2)解决方法 ...
- ios开发缓存处理类NSCash类的了解与使用
一:NSCash的基本了解 #import "ViewController.h" @interface ViewController ()<NSCacheDelegate&g ...
- iOS数据缓存及YYCache的实现分析
1. 什么是cache cache就是缓存的意思. 计算机上的cache就是高速缓存,计算机组成课程里的定义是,存在于主存和CPU之间,主要用于解决CPU处理数据的速度远远大于读取主存数据的速度. 手 ...
随机推荐
- 如何在3GPP下载协议
以下载AT Commands协议为例. 1. 打开3GPP网址:http://www.3gpp.org/ 2. 打开Specification-Specification Numbering,如图.去 ...
- eclipse 如何安装freemaker ftl 插件
借鉴原链接 https://blog.csdn.net/lsygood/article/details/80565933 在线安装的方法是:Help –> Install New Softw ...
- node.js中process进程的概念和child_process子进程模块的使用
进程,你可以把它理解成一个正在运行的程序.node.js中每个应用程序都是进程类的实例对象. node.js中有一个 process 全局对象,通过它我们可以获取,运行该程序的用户,环境变量等信息. ...
- Android抓取log日志过滤
前提:Android SDK已安装并配置环境变量 1.手机USB调试模式打开,连接PC 2.cmd窗口,执行adb logcat >log.log // 输出日志到一个log文件 或者执行a ...
- 除了Office和wps,还有什么办公软件比较好用?
一.不能没有的pdf软件 以下介绍的是PDF(Portable Document Format)常用的阅读.编撰以及其他工具.阅读工具1.Adobe AcrobatReader中文版应用平台:Wind ...
- redis安全删key脚本(模糊匹配,长list,大set等)
两种情况: 1.删除指定前缀开头的rediskey ,扫描和删除过程中对线上无感知 2.删除一个大的list,set,zset,hash,这种得分批次减少大小,一直缩到0再删 第一种情况:只要知道线上 ...
- CDH 安装
CDH 安装 市场上免费大数据框架主要有三个版本,原生的 Apache 版本,Cloudera(https://www.cloudera.com/) 公司研发的(Cloudera Distributi ...
- java多线程系列11 juc包下的队列
队列分为两类 阻塞队列 BlockingQueue提供如下两个支持阻塞的方法: (1)put(E e): 尝试把e元素放如BlockingQueue中,如果该队列的元素已满,则阻塞该线程. ...
- Cmd控制台修改编码方法
Cmd控制台修改编码方法 一.前言 在Unbuntu中用sqlite3-command-line操作sqlite3还好好的,到了windows下查询表内容时发现中文全部乱码了!马上想到sqlite3内 ...
- CDH版本的hadoop下载
http://archive.cloudera.com/cdh5/cdh/5/加要下载的cdh版本插件 例如: http://archive.cloudera.com/cdh5/cdh/5/zooke ...