【问题标题】:SDWebImage refreshingSDWebImage 刷新
【发布时间】:2017-08-21 01:00:11
【问题描述】:

我正在使用SDWebImage 从 URL 加载图像。在服务器上更新图像时,即使我使用了options: .refreshCached,图像视图中的图像也不会更新。更新图像后,URL 保持不变。 我可以直接更改此 URL 的缓存中的图像吗? 我用谷歌搜索了这个问题,我知道我不能直接在缓存中更改它。如果我无法直接更改缓存中的图像以指定 URL,是否可以清除特定键(URL)的缓存值?

   self.imgView.sd_setImage(with: url, placeholderImage: #imageLiteral(resourceName: "Timg"), options: .refreshCached, completed: { (image: UIImage?, error: Error?, cacheType: SDImageCacheType, imageURL: URL?) in
                if image != nil{
                    self.imgView.contentMode = .scaleAspectFill
                }
            })

【问题讨论】:

  • 不,SDWebImage 似乎有限制。为了解决这个问题,您还应该在更改图像时更改服务器上图像的名称。
  • 我认为,是的,您可以从缓存中删除图像。这样,您在图像更改后再次下载它。
  • 感谢您的帮助。我已经解决了这个问题。这是“SDWebImage”中的问题,我通过在 SDWebImage 中进行一些修改来强制它从服务器刷新图像

标签: ios objective-c caching swift3 sdwebimage


【解决方案1】:

看起来该问题已在 SDWebImage 的官方 GitHub 页面中提出。很明显,答案表明[[SDImageCache sharedImageCache] removeImageForKey:image_url fromDisk:YES]; 做得不够公平,无法清除图像。

建议的答案说

 [[SDImageCache sharedImageCache] clearMemory];
 [[SDImageCache sharedImageCache] cleanDisk];

现在是否需要这两个语句取决于您如何配置 SDImageCache。

它们是什么意思?

SDWebImage 广泛缓存图像,它将缓存副本保存在 RAM 和硬盘中。当请求图像时,它首先访问 RAM Cache 以找到图像,如果找不到则访问磁盘缓存。并从磁盘缓存中加载 RAM 缓存。

因此,仅从磁盘清除仍会将图像保留在磁盘缓存中,并且当请求图像而不是从网络下载时,它会从磁盘加载并在 RAM 中保留一份副本以供将来使用。所以它破坏了从缓存中删除图像的想法。

我知道这不是您专门寻找的答案,但不幸的是我不知道从 SDImageCache 中删除特定图像。

【讨论】:

    【解决方案2】:

    [[SDImageCache sharedImageCache] removeImageForKey:image_url fromDisk:YES];

    【讨论】:

    • 我试过了,老图一次又一次加载,更新后的图没有显示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2021-08-20
    • 1970-01-01
    相关资源
    最近更新 更多