此处对题目再次详细的解释一下:我们使用SDWebImage加载图片,可以说是用起来非常之简单,它的内部已经给我们实现了缓存的机制,也正是由于这个缓存机制的原因,当后台更换了图片的内容,但是图片的URL不变时,我们加载不出来这个新的图片,显示的还是之前缓存的图片;为什么呢?
大致原因就是应为SDWebImage将缓存的图片的URL当做key值存入本地,当再次取的时候,通过这个key值来获取到对应的图片,但是图片的URL没有变化,最新的图片没有缓存下来,所以我们取到的图片还是之前的;
这里也小小的总结一下原因:由于之前我加载图片时用的方法如下(当然这个方法就是造成了上面问题的原因,就不要使用了)
[self.imageView sd_setImageWithURL:[NSURL URLWithString:urlStr]];
当经过查看了一些资料之后,发现用上面的这种方法,加载不出来最新的图片,所以我改用下面的方法,去解决这种问题:
[self.imageView sd_setImageWithURL:[NSURL URLWithString:urlStr] placeholderImage:nil options:SDWebImageRefreshCached];
之前的版本这么改是有效的,不过后来就不行了,我也来更新一下这篇文章;除了上面的修改之外,我们还需要在SDWebImage的内部,SDWebImageManager.m文件中,大概176行左右吧,把之前的代码:(如下)
if (image && options & SDWebImageRefreshCached) {
// force progressive off if image already cached but forced refreshing
downloaderOptions &= ~SDWebImageDownloaderProgressiveDownload;
// ignore image read from NSURLCache if image if cached but force refreshing
downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse;
}
更换成如下代码:
if (image && options & SDWebImageRefreshCached) {
// force progressive off if image already cached but forced refreshing
downloaderOptions &= ~SDWebImageDownloaderProgressiveDownload;
// remove SDWebImageDownloaderUseNSURLCache flag
downloaderOptions &= ~SDWebImageDownloaderUseNSURLCache;
// ignore image read from NSURLCache if image if cached but force refreshing
downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse;
}
网友评论