SDImageCache
SDImageCache 是 SDWebImage 中用来处理缓存的类,他是一个单例
SDWebImage 中关于缓存可以分为磁盘缓存 id<SDDiskCache>
和 内存缓存 id<SDMemoryCache>
1 | @interface SDImageCache () |
1 | // 查询缓存操作 |
先看一下 SDImageCacheConfig
SDImageCacheConfig 是一个关于缓存设置相关的类
1 | - (instancetype)init { |
SDMemoryCache 内存缓存
SDMemoryCache 继承自 NSCache,实现了 SDMemoryCache 协议,封装了一系列方法,便于扩展
1 | @interface SDMemoryCache <KeyType, ObjectType> : NSCache <KeyType, ObjectType> <SDMemoryCache> |
SDMemoryCache 也使用 NSMapTable 来储存缓存的数据,并加了锁来保证线程安全
那为什么 SDMemoryCache 继承自 NSCache 还要维护一个 NSMapTable 呢,因为 NSCache 对于 value 是强引用的,而 NSMapTable 对于value 是弱引用的!
可以通过config 的 shouldUseWeakMemoryCache 来关闭使用 NSMapTable 管理。
SDDiskCache 磁盘缓存
SDMemoryCache 实现了 SDDiskCache 协议,封装了一系列方法,便于扩展