iOS-关于缓存SDImageCacheImage,一直刷新UIImageView内存一直增加问题

Posted 小K’s Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS-关于缓存SDImageCacheImage,一直刷新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;

通过上述实现,内存一切正常。 




以上是关于iOS-关于缓存SDImageCacheImage,一直刷新UIImageView内存一直增加问题的主要内容,如果未能解决你的问题,请参考以下文章

IOS - 如何从 WKWebView 获取缓存的资源?

关于新浪微博缓存的功能是怎么实现的

iOS缓存(转)

iOS开发网络篇—数据缓存

性能优化:关于缓存的一些思考

iOS开发网络篇—数据缓存