日常开发中我们比较常见的是SDWebImage进行图片的请求和展示,比如比较常用的方法有:
[self.imageView sd_setImageWithURL:[NSURL URLWithString:urlStr]];
以及
[self.imageView sd_setImageWithURL:[NSURL URLWithString:urlStr] placeholderImage:[UIImage imageNamed:@"pic_youjihua_default"]];
而这种如果图片链接的内容,即链接对应的图片不会改变的话,那么这样肯定是没有问题的啊!但是有时候后台是这样的,返回的链接是一样的,但是链接对应的图片却是不一样的,可以用浏览器在不同的时候打开链接进行验证,那么这种情况下我们又该怎么办呢?因为上面的方法已经失效了,下面我们来说说继续在使用SDWebImage的情况下进行实现。
方法一:
[ self.imageView sd_setImageWithURL:[NSURL URLWithString:urlStr] placeholderImage:[UIImage imageNamed:@"pic_youjihua_default"] options:SDWebImageRefreshCached];
就是直接使用了SDWebImageRefreshCached刷新缓存,这个方法我有段时间成功了,后面也不能实现了,同样也有人成功了,这个有点奇妙啊!
方法二:
继续使用SDWebImage来实现,既然SDWebImage是有缓存的,那么我们在每次对图片进行赋值前都来删除一下它的缓存不就实现了么?
导入头文件:
#import "SDImageCache.h"
然后使用方法如下:
//对应的图片链接
NSString *urlStr = @"http://n.****.cn/edu/transform/20160505/pe7k-fxryhhu2274915.png";
//清除对应链接的图片缓存
[[SDImageCache sharedImageCache] removeImageForKey:urlStr withCompletion:^{
}];
[self.imageView sd_setImageWithURL:urlStr placeholderImage:[UIImage imageNamed:@"touxiang"]];
这样的方式就实现了,只是多了一步清除缓存。
方法三:
这个方法就不再使用SDWebImage来实现了,直接使用如下方式:
NSData * data = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:urlStr]];
UIImage *tempImage = [[UIImage alloc]initWithData:data];
self.imageView.image = tempImage;
通过获取NSData的方式更好的解决了这个问题,效果更好,因为这里是不能考虑缓存的,每次都要进行新的请求,至于各位猿爷如何选择就要看各位的了,小蜜蜂抛砖引玉一下,也请各位猿爷赐教更好的方式。
欢迎和我交流,QQ:834537795.(小蜜蜂)
网友评论