【问题标题】:SDWebImage not updating image in cacheSDWebImage 不更新缓存中的图像
【发布时间】:2015-12-03 11:44:51
【问题描述】:

我正在使用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];
}

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

【问题讨论】:

  • 有没有办法知道图片是否更新了?
  • 尝试使用这个[[SDImageCache sharedImageCache]imageCache clearMemory]; [[SDImageCache sharedImageCache]imageCache clearDisk];
  • @EktaMakadiya,每次清除缓存都会从服务器重新加载数据。它忽略了 SDWebImage 的使用。
  • 如果你的 url 是静态的,那么不要缓存图片。每次重新加载图像。因为缓存的意思是存储图片以备后用。

标签: ios objective-c sdwebimage image-caching


【解决方案1】:

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

【讨论】:

  • 下载图片时我已经在选项中使用SDWebImageRefreshCached 。但仍显示旧图像。
  • SDWebImageRefreshCached 不会忽略您的缓存,它只会处理 Cache-Control http 标头。因此,服务器端设置可以控制您的缓存寿命本身。您应该与服务器管理员沟通以讨论此行为w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
  • 谢谢。我会尝试讨论。
【解决方案2】:

来自SDWebImagedocs

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

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

如果您在所有代码中使用它,图像缓存 的目的就会失效。因为每次都会下载图像。相反,您可以:

  1. 如果您管理服务器,您可以在 DB 中设置一些标志来指示服务器上的图像已更改。
  2. 实现一些逻辑,只在 2 天内使用一次 SDWebImageRefreshCached 或类似的时间,其他时间使用普通代码。

如果可行,您也可以不时清除整个缓存以强制刷新。

【讨论】:

  • 清除整个缓存是不可行的。它忽略了 SDWebImage 的使用。并且由于我添加了从服务器下载图像的代码,它在选项中包含“SDWebImageRefreshCached”。但每次都显示旧图像。
  • 您是否尝试过在浏览器中调用该 url 并确保图像已实际更改?
  • 是的,它尝试调用它。在我的应用程序的其他地方,我正在从服务器下载相同的图像而不使用 SDWebImage。图片在那里更新。
猜你喜欢
  • 2012-10-13
  • 2015-04-19
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
相关资源
最近更新 更多