说到缓存,最常用的是图片缓存SDWebImage,今天就对比下SDImageCache,EGOCache,YYCache
SDImageCache
包含内存缓存和硬盘缓存, 内存缓存用的是NSCache,硬盘缓存用的是NSFileManager将数据NSData的形式存到目录当中,SDImageCache值得学习的是清理缓存的策略
在初使化的时候设置缓存保存时间,创建NSCache,_ioQueue队列<用于负责对硬盘的读写>,添加观察者,在收到内存警告、关闭或进入后台时完成对应的处理;
清除缓存, 内存缓存在监听到内存报警告后NSCache去清理,硬盘缓存在App退到后台时检查缓存是否过期,若过期即清理缓存, 重点是如何检测出缓存是否过期
一般情况下如果查找缓存的文件路径会用NSString来描述,对于 OS X 10.7 和 iOS 5以后, NSURL 更便于使用,而且更有效率,它还能缓存文件系统的属性。NSURL 有八个方法来访问被称为 resource values 的东西。这些方法提供了一个稳定的接口,使我们可以用来获取和设置文件与目录的各种属性,例如文件大小<NSURLFileSizeKey>,文件修改时间<NSURLContentModificationDateKey>, 尤其是在遍历目录内容时,使用``` -[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:],```并传入一个关键词(keys)列表, 检索它们,显著的提升性能.参考
NSFileManager 文件用NSURL检索可以查出上次文件修改时间,用这个时间与当前时间对比,一般人不知道的技能 很赞 !
EGOCache
本质上是把所有要缓存的对象转化成NSData, 然后用NSFileManager 缓存文件, 在初使化的时候创建在三个操作队列,一个用来读写硬盘,两个用来读写plist文件,说到plist文件必须说下它的思路,作者为了全球检查缓存是否过期将 缓存的文件 的 的key 全部存到plist文件中,设置key存入的时间<即文件的加入缓存的时间>,这样就可以直接用plist文件中key-value的形式检索出过期的文件
YYCache
本质上是用sqlite3, NSFileManager 缓存文件, 清理缓存的策略基本上与EGOCache 类似, 不过好像比较复杂,应深入看下