2013-06-12 59 views
4

我期待在UIImageView+AFNetworking类别中为缺省情况下使用的AFImageCache替换为基于磁盘的内容,并且可以更加准确地进行管理(类似NSURLCache)。不幸的是,因为UIImageView+AFNetworking是一个类别,而不是子类,我不能只是覆盖af_sharedImageCache与子类别UIImageView或其他类别。用于AFNetworking中的UIImageView的磁盘备份映像缓存

有没有其他方法可以实现此功能,而不需要将大部分UIImageView+AFNetworking复制并粘贴到我自己的子类中?

回答

6

SDWebImage项目提供了一个类似的UIImageView类别,但同时提供内存中(使用NSCache)和磁盘(使用NSFileManager)缓存。我建议你在需要缓存到磁盘时使用它。

此实现的缺点是,您的网络请求不会通过AFHTTPClient子类,因此根据您的需要可能需要实现自己的操作队列,身份验证等。如果您只是使用它对于一些基本的东西,比如在表格视图中显示头像图片,应该没问题。

如果这个缺点让你感到困扰,另一个想法是使用SDImageCache(包含在SDWebImage项目中)来缓存图像,并使用AFNetworking自行下载它们。

最后,请注意,AFNetworking内置支持NSURLCache,如果您创建一个它将缓存您的图像到磁盘。但是,图像缓存通常用于在UIScrollView中显示大量图像,而NSURLCache对于平滑滚动的性能不够好。

+0

谢谢你,我一定会仔细看看SDWebImage。出于好奇,为什么NSURLCache的性能不理想?我的印象是它使用内存和磁盘缓存,就像L1和L2缓存,其中Web请求本身就是L3,这在理论上会很快。 – jpredham

+1

这是一个很好的解释:https://github.com/rs/SDWebImage/wiki/How-is-SDWebImage-better-than-X%3F – jpredham

2

我有一个AFNetworking的分支,它包含NSCachesDirectory中的文件缓存。

你可以在这里找到它:https://github.com/andyast/AFNetworking_FileCache 有一个分支与V1.3.3兼容,如果你还需要的话。

+0

很酷,工作,如果AfNetworking以这种方式工作将是最好的!难以直接修改最新的AfNetworking吗? – Renetik