美文网首页
iOS开发:SDWebImage加载不同图片但是图片的URL是同

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

作者: First灬DKS | 来源:发表于2016-05-18 12:11 被阅读3563次

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

    相关文章

      网友评论

          本文标题:iOS开发:SDWebImage加载不同图片但是图片的URL是同

          本文链接:https://www.haomeiwen.com/subject/nflwrttx.html