当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS-关于缓存【SDImageCache】Image,一直刷新UIImageView内存一直增加问题

iOS-关于缓存【SDImageCache】Image,一直刷新UIImageView内存一直增加问题

2018年12月07日  | 移动技术网移动技术  | 我要评论

最近做的一个项目,里面有这样一个需求,在一个页面,用一个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;

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网