最近做的一个项目,里面有这样一个需求,在一个页面,用一个UIImageView不停的刷新显示图片,图片可能会重复显示;图片是从服务器下载下来的data流,data转UIimage系统的方法:
UIImage *image = [UIImage imageWithData:data];
这个方法并不好,用过 SDWebImage 的都知道为什么不好,既然图片是服务器下载,而且图片可以重复,那就用 SDWebImage 做缓存,下次请求可以用图片唯一标示先从本地拿,如果有,就不用再请求,直接返回就行,下面是图片下载成功后返回的 response data流 :
UIImage *responseImage = [UIImage sd_imageWithData:response ];
[[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:response ]; [[SDImageCache sharedImageCache] storeImage:responseImage forKey:@\"imageKey-图片唯一标示\" completion:nil];
UIImage *imageResponseCache = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:@\"imageKey-图片唯一标示\"];
imageView.image =imageResponseCache;
通过上述实现,内存一切正常。
继续阅读与本文标签相同的文章
上一篇 :
第四课:模型的使用
-
阿里钉钉副总裁白惠源:数字未来已来,“钉钉”能为你带来哪些变革?
2026-05-19栏目: 教程
-
阿里云建站的基本流程
2026-05-19栏目: 教程
-
搞清楚Spring Cloud架构原理的这4个点,轻松应对面试官
2026-05-19栏目: 教程
-
阿里云上云企业案例周刊·第1期
2026-05-19栏目: 教程
-
CC攻击有哪些特点以及如何防御CC攻击?
2026-05-19栏目: 教程
