我在一个表格视图中显示一个从网上下载的图标列表和文本。这些图标可以在服务器端改变,我需要在新的图标出现时立即替换它们。我尝试使用以下代码。
[imgView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"table_avatar_icon"] options:SDWebImageCacheMemoryOnly];
然后调用 [[SDImageCache sharedImageCache] clearMemory];
在我的刷新回调中,但它并没有清除缓存的内容。更重要的是,即使我关闭应用程序并再次打开它,图像仍然存在。
我发现只有一种方法可以清除缓存,那就是通过调用 [[SDImageCache sharedImageCache] clearDisk];
. 这只有在我关闭并重新打开应用程序后才有效。
如何强制SDWebImage不使用磁盘缓存?
SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
[imageCache clearDisk];
不要忘了把这几行代码放在你的 didReceiveMemoryWarning
,也。
找到了源头,如果一个问题。看来,我是被使用的Singleton模式欺骗了。SDImageCache
. 在UIImageView上使用的扩展的缓存是由 SDWebImageManager
的实例变量,它有一个 SDImageCache
. 如果你想清除分机的缓存,你必须调用它的 imageCache
的方法,如clearDisk和clearMemory。
只有以下代码为我工作: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)
除了SDImageCache方法外,我强烈建议你使用以下方法 检查你的图片URLs。 在我的情况下,我尝试了imageCache的所有方法,但内存问题仍然存在。崩溃主要发生在iPhone 4s上,因为硬件无法处理它。
主要的问题是 url "安培 "编码!
例如,看看这些url:第一个url使用"&",第二个没有。因为使用了 "amp",我的JSON库无法读取宽度,宽度值变得比应该的高很多。这就是为什么我有一个内存问题。
1) select.php?imageid=101961221 "&" ;宽度=100 "&" ;isWatermarked=true
2) select.phpimageid=101961221&width=100&isWatermarked=true。
还 最新版本的SDWebImage库 已包括 UIImageView+WebCache.h
类,它真的很好地处理了缓存问题。