2013-06-03 86 views
2

我在我的应用程序中有几个UIImageView,我使用AFNetworking的setImageWithURL从我的服务器填充图像。该文档说这个方法使用标准的UIImageView缓存策略。我的问题是,如果我更新我的服务器上的图像,图像不会很快在应用程序中更新。即使我关闭了应用程序并重新启动。如果我想要更新图像,我必须重新安装应用程序,这会清除缓存并引入新图像。显然这对于​​用户来说不是期望的效果。UIImageView缓存策略-AFNewtorking

AFNetworking的缓存是私有的,所以我没有在UIImageView + AFNetworking类别中直接访问它。关于清除整个应用程序缓存的任何想法?我将如何实现这一目标?

回答

2

您可以访问+ (AFImageCache *)af_sharedImageCache方法,最容易的方法是将其复制到接口文件UIImageView+AFNetworking.h中。这将暴露单例NSCache子类。然后,您可以拨打– removeObjectForKey:– removeAllObjects分别移除图像或所有图像。

如果您不想这样做,请考虑使用NSHTTPURLResponse对象作为关键字缓存图像。您可以通过向URL附加一些随机值来创建不同的密钥(例如,您可以附加?garbage=4H5G789H35G89H)。但是,这基本上会浪费内存,因为您将缓存永远不会被检索的图像。

最后,您可能想要submit an enhancement request(或自己编写代码)来公开缓存或使缓存可选。

+0

正是我在找的东西。谢谢 – JeffN

+0

没问题。只是好奇,你采取了哪种方法? –

+0

在UIImageView + AFNetworking.h中创建一个名为clearAFImageCache的方法,调用[[[self class] af_sharedImageCache] removeAllObjects],然后调用[UIImageView clearAFImageCache] – JeffN