我正在显示从网络下载的图标列表,其中包含表格视图中的文本。可以在服务器端更改图标,我需要在新图标可用时立即更换它们。我尝试使用以下代码:
[imgView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"table_avatar_icon"] options:SDWebImageCacheMemoryOnly];
并在我的刷新回调中调用[[SDImageCache sharedImageCache] clearMemory];
,但它不会清除缓存的内容。更重要的是,即使我关闭应用程序并再次打开它,图像仍然存在。
我发现只有一种方法可以清除缓存,而是通过调用[[SDImageCache sharedImageCache] clearDisk];
。这仅在我关闭并重新打开应用程序后才有效。
如何强制SDWebImage不使用磁盘缓存?
答案 0 :(得分:113)
SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
[imageCache clearDisk];
不要忘记将这些代码行放在didReceiveMemoryWarning
中。
答案 1 :(得分:9)
如果出现问题,请找到来源。似乎我被SDImageCache
中使用的Singleton模式欺骗了。通过UIImageView使用的扩展缓存由SDWebImageManager
控制,其实例变量为SDImageCache
。如果要清除扩展缓存,则必须调用其imageCache
的方法,如clearDisk和clearMemory。
答案 2 :(得分:1)
只有以下代码对我有用: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)
答案 3 :(得分:-1)
除了SDImageCache方法,我强烈建议您检查您的图片网址。在我的情况下,我尝试了imageCache的每个方法,内存问题仍在继续。崩溃主要发生在iPhone 4s上,因为硬件无法处理它。
主要问题是 url&ampersand encoding!
在示例中,请查看以下网址:第一个网址是“& 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
类,它可以很好地处理缓存问题。