## 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