iOS-关于缓存【SDImageCache】Image,一直刷新UIImageView内存一直增加问题
程序员文章站
2023-11-28 08:09:22
最近做的一个项目,里面有这样一个需求,在一个页面,用一个UIImageView不停的刷新显示图片,图片可能会重复显示;图片是从服务器下载下来的data流,data转UIimage系统的方法: 这个方法并不好,用过 SDWebImage 的都知道为什么不好,既然图片是服务器下载,而且图片可以重复,那就 ......
最近做的一个项目,里面有这样一个需求,在一个页面,用一个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;
通过上述实现,内存一切正常。