SDWebImage不更新缓存中的图像

时间:2015-12-03 11:44:51

标签: ios objective-c sdwebimage image-caching

我使用SDWebImage库来处理图像缓存。我实现了一种从服务器下载图像并在tableView中填充数据的方法。以下是我在tableViewCell下载图片并显示的代码 在cellForRowAtIndexPath中,我执行了以下代码

[cell.profileImageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:nil options:SDWebImageRefreshCached];

这里完美无缺。但是当我在服务器上更新图像时,tableViewCell仍然显示相同的图像。问题是,它的缓存不是更新图像。我使用相同的关键字进行了搜索,并在StackOverflow上遇到了this问题。但无法解决问题。我还尝试清除viewDidDisappear

上的内存和缓存
-(void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:YES];
    [[SDImageCache sharedImageCache]clearMemory];
    [[SDImageCache sharedImageCache]clearDisk];
}

但它效率不高。当服务器上的映像更新时,还有其他方法可以更新缓存吗?

2 个答案:

答案 0 :(得分:2)

您可以使用SDWebImageRefreshCached选项刷新具体图像,但是您永远不知道图像是否在服务器端更改。因此,只有您决定是否使用图像缓存以及何时应更新缓存。

答案 1 :(得分:1)

来自SDWebImage docs

  

如果您不控制您正在使用的图像服务器,则可能无法在更新内容时更改该网址。在这种情况下,您可以使用SDWebImageRefreshCached标志。这会稍微降低性能,但会尊重HTTP缓存控制头

[imageView sd_setImageWithURL:url
             placeholderImage:[UIImage imageNamed:@"placeholder.png"]
                      options:SDWebImageRefreshCached];

如果在所有代码中使用它,它将无法实现图像缓存的目的。因为每次都会下载图像。相反,你可以:

  1. 如果您管理服务器,可以在数据库中设置一些标志,以指示服务器上的图像已更改。
  2. 实施一些逻辑,仅在2天内使用SDWebImageRefreshCached一次或类似的事情,并在其他时间使用普通代码。
  3. 如果可行,您还可以偶尔清除整个缓存以强制刷新。