2012-12-13 106 views
34

我正在显示从Web下载的图标列表,其中包含表格视图中的文本。图标可以在服务器端进行更改,我需要在新图标可用时立即更换它们。我尝试使用下面的代码:SDWebImage清除缓存

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

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

我发现只有一种方法来清除缓存,它是通过调用[[SDImageCache sharedImageCache] clearDisk];。这只有在我关闭并重新打开应用后才有效。

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

+0

对于所有只希望每次都要重新下载一些图像的人,请将SDWebImageRefreshCached传入选项 – Eugene

回答

112
SDImageCache *imageCache = [SDImageCache sharedImageCache]; 
[imageCache clearMemory]; 
[imageCache clearDisk]; 

不要忘了在didReceiveMemoryWarning也放这些代码行。

+20

当发生内存警告时,SDWebImage的当前版本将自动清除内存缓存。无需执行此操作,尤其不需要清除磁盘缓存。 –

+0

请问您可以添加一个源代码。哪个版本将完全支持这些功能? –

+5

https://github.com/rs/SDWebImage/blob/master/SDWebImage/SDImageCache.m#L65 –

9

找到问题的来源。看来我被SDImageCache中使用的Singleton模式蒙上了一层阴影。通过UIImageView使用的扩展缓存由SDWebImageManager控制,其实例变量为SDImageCache。如果你想清除缓存的扩展名,你必须调用它的imageCache的方法,如clearDisk和clearMemory。

+0

,无法调用clearcache方法。 [[SDWebImageManager sharedManager] clearCaches]。我尝试过,但它崩溃了。请帮帮我。 –

+3

@SurajShinde SDImageCache没有这种方法,当然它会崩溃。使用'[[[[SDWebImageManager sharedManager] imageCache] clearDisk]; [,[[[SDWebImageManager sharedManager] imageCache] clearMemory];' – Eugene

+0

谢谢,实际上我使用的是旧的SDwebcache,它没有imageCache实例。 –

-1

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

主要问题是url符号编码!

在示例中,查看这些网址:第一个网址是使用“& amp”,第二个网址不是。由于&符号我的JSON库无法读取宽度和宽度值得到高得多,那应该是。这就是为什么我有记忆问题。

1)/select.php?imageid=101961221 “&安培”;宽度= 100 “&安培”; isWatermarked =真

2)/select.phpimageid=101961221 &宽度= 100 & isWatermarked =真

另外,最新SDWebImage库的版本有包括UIImageView+WebCache.h类,它真的很好地处理了缓存的问题。