iOS开发:SDWebImage加载不同图片但是图片的URL是同

2016-05-18  本文已影响3563人  First灬DKS

此处对题目再次详细的解释一下:我们使用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;
}
上一篇下一篇

猜你喜欢

热点阅读