【问题标题】:SDWebImage clearing cacheSDWebImage 清除缓存
【发布时间】:2012-12-13 17:50:17
【问题描述】:

我正在显示从网络下载的图标列表,其中包含表格视图中的文本。可以在服务器端更改图标,一旦有新图标可用,我需要更换它们。我尝试使用以下代码:

[imgView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"table_avatar_icon"] options:SDWebImageCacheMemoryOnly];

并在我的刷新回调中调用[[SDImageCache sharedImageCache] clearMemory];,但它不会清除缓存的内容。更重要的是,即使我关闭应用程序并再次打开它,图像仍然存在。

我发现只有一种方法可以清除缓存,那就是调用[[SDImageCache sharedImageCache] clearDisk];。仅在我关闭并重新打开应用程序后才有效。

如何强制 SDWebImage 不使用磁盘缓存?

【问题讨论】:

  • 对于所有只想每次重新下载一些图像的人,将SDWebImageRefreshCached传递到选项中

标签: iphone objective-c ios sdwebimage


【解决方案1】:
SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
[imageCache clearDisk];

不要忘记将这些代码行也放入您的didReceiveMemoryWarning。

【讨论】:

  • 当前版本的SDWebImage会在出现内存警告时自动清除内存缓存。不需要这样做,尤其是不需要清除磁盘缓存。
  • 能否请您添加来源。哪个版本将完全支持这些功能?
  • 最好使用非阻塞版本 - clearDiskOnCompletion:
  • @Rizon,clearDisk 没有阻塞!唯一的区别是它没有完成回调。
  • 最新版本更新:SDImageCache *imageCache = [SDImageCache sharedImageCache]; [imageCache clearMemory]; [imageCache clearDiskOnCompletion:^(){}];
【解决方案2】:

找到问题的来源。看来我被SDImageCache 中使用的Singleton 模式欺骗了。在 UIImageView 上使用的扩展缓存由SDWebImageManager 控制,它的实例变量为SDImageCache。如果要清除扩展缓存,则必须调用其imageCache 的方法,如clearDisk 和clearMemory。

【讨论】:

  • 无法调用 clearcache 方法。 [[SDWebImageManager sharedManager] clearCaches] 。我试过了,但它崩溃了。请帮帮我。
  • @SurajShinde SDImageCache没有这种方法,当然会崩溃。使用[[[SDWebImageManager sharedManager] imageCache] clearDisk];、[[[SDWebImageManager sharedManager] imageCache] clearMemory];
  • 谢谢,实际上我使用的是旧的 SDwebcache,它没有 imageCache 实例。
  • 不需要这个,标记的答案是做同样的事情。 imageCache 的实例变量 SDWebImageManager 只返回 [SDImageCache sharedImageCache]。看createCache方法:github.com/rs/SDWebImage/blob/master/SDWebImage/…
【解决方案3】:

只有以下代码对我有用:Swift 5.0、Xcode 11、iOS 13、SDWebImage pod 5.0

 SDWebImageManager.shared.imageCache.clear(with: .all) {
        print("deleted all")
 }

您可以在其中选择SDImageCacheType.disk, SDImageCacheType.memory, SDImageCacheType.disk等选项

此外,如果您想从缓存中删除特定图像,请使用以下内容:

SDWebImageManager.shared.imageCache.removeImage(forKey: "url of image", cacheType: .all)

【讨论】:

  • 这也适用于 Swift 4 但是:SDWebImageManager.shared()?.imageCache.removeImage(forKey: "url of image")
【解决方案4】:

除了 SDImageCache 方法,我强烈建议您检查您的图片网址。在我的情况下,我尝试了所有 imageCache 方法,但内存问题仍然存在。由于硬件无法处理,崩溃主要发生在 iPhone 4s 上。

主要问题是 url & 编码!

例如,查看这些 url:第一个 url 使用“&amp”,第二个没有。由于 & 符号,我的 JSON 库无法读取宽度,并且宽度值变得比它应该高得多。这就是我有记忆问题的原因。

1) /select.php?imageid=101961221 "&amp" ;width=100 "&amp" ;isWatermarked=true

2) /select.phpimageid=101961221&width=100&isWatermarked=true

此外,最新版本的 SDWebImage 库包含 UIImageView+WebCache.h 类,它可以很好地处理缓存问题。

【讨论】:

    【解决方案5】:

    可以在服务器端更改图标,

    所以你需要每次都缓存刷新加载。

    如果您使用的是最新的 SDWebImage 框架 (5.12.x)

    你可以这样称呼它,

    [imgView sd_setImageWithURL:[NSURL URLWithString:urlStr] placeholderImage:[UIImage imageNamed:@"xxx" options:SDWebImageRefreshCached];
    

    在 220112 编辑。

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2012-12-14
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多