## SDWebImage学习-SDImageCache


###整体介绍缓存组成

1、SDImageCacheDefine类
主要是一些基础定义

缓存类型枚举  SDImageCacheType

一系列缓存操作Block ,SDImageCacheCheckCompletionBlock等

缓存查询过程中的解码方法SDImageCacheDecodeImageData

定义了核心协议-SDImageCache，自定义缓存时只要实现该协议的方法，可以通过SDImageCachesManager来注册管理多个缓存

2、SDImageCacheConfig文件
配置信息和选项
SDImageCacheConfigExpireType，用来计算图片的过期时间的选项

其他属性
@property (assign, nonatomic) NSDataReadingOptions diskCacheReadingOptions;

NSDataReadingUncached : 不要缓存，如果该文件只会读取一次，这个设置可以提高性能；
NSDataReadingMappedIfSafe : 在保证安全的前提下使用mmap；
NSDataReadingMappedAlways : 使用mmap；

可以传入NSDataReadingMappedIfSafe，这样系统就不会把整个文件读进内存，而是用进程的内存虚拟地址空间去映射实际的文件中，mmap不会为文件分配物理内存，而是相当于将内存地址指向文件的磁盘地址。一定场景下可以用来解决内存暴涨问题，例如加载一个视频文件，如果一下子加载完整的视频文件，内存肯定暴涨,采用mmap来优化，建立文件映射，就可以有效减少内存占用。

@property (assign, nonatomic) NSDataWritingOptions diskCacheWritingOptions;
 将缓存写入磁盘时的写入选项，默认为`NSDataWritingAtomic`，但是可以设置为“NSDataWritingWithoutOverwriting”以防止覆盖现有文件

2、SDImageCache类
缓存的核心类，只要管理内存缓存和磁盘缓存

SDImageCacheOptions 一些缓存的选项
SDImageCacheConfig config配置对象
memoryCache 内存缓存
diskCache 磁盘缓存

- (nonnull instancetype)initWithNamespace:(nonnull NSString *)ns
                       diskCacheDirectory:(nullable NSString *)directory;
  可以指定命名空间和沙盒目录中
   _diskCachePath = [directory stringByAppendingPathComponent:ns];
   命名空间也就是保存图像的文件夹名字

一系列存储、查询、删除和清理缓存等方法
缓存相关信息

@property (nonatomic, strong, nullable) dispatch_queue_t ioQueue;
读写串行队列

监听
UIApplicationWillTerminateNotification
UIApplicationDidEnterBackgroundNotification













SDImageCacheConfig 



