继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

米脂
关注TA
已关注
手记 492
粉丝 88
获赞 591

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

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

作者:macro小K
出处:http://www.cnblogs.com/wangkejia/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,请在文章页面明显位置给出原文连接。


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP