SDWebImage学习2-SDImageCache 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. ## SDWebImage学习-SDImageCache
  2. ###整体介绍缓存组成
  3. 1、SDImageCacheDefine类
  4. 主要是一些基础定义
  5. 缓存类型枚举 SDImageCacheType
  6. 一系列缓存操作Block ,SDImageCacheCheckCompletionBlock等
  7. 缓存查询过程中的解码方法SDImageCacheDecodeImageData
  8. 定义了核心协议-SDImageCache,自定义缓存时只要实现该协议的方法,可以通过SDImageCachesManager来注册管理多个缓存
  9. 2、SDImageCacheConfig文件
  10. 配置信息和选项
  11. SDImageCacheConfigExpireType,用来计算图片的过期时间的选项
  12. 其他属性
  13. @property (assign, nonatomic) NSDataReadingOptions diskCacheReadingOptions;
  14. NSDataReadingUncached : 不要缓存,如果该文件只会读取一次,这个设置可以提高性能;
  15. NSDataReadingMappedIfSafe : 在保证安全的前提下使用mmap;
  16. NSDataReadingMappedAlways : 使用mmap;
  17. 可以传入NSDataReadingMappedIfSafe,这样系统就不会把整个文件读进内存,而是用进程的内存虚拟地址空间去映射实际的文件中,mmap不会为文件分配物理内存,而是相当于将内存地址指向文件的磁盘地址。一定场景下可以用来解决内存暴涨问题,例如加载一个视频文件,如果一下子加载完整的视频文件,内存肯定暴涨,采用mmap来优化,建立文件映射,就可以有效减少内存占用。
  18. @property (assign, nonatomic) NSDataWritingOptions diskCacheWritingOptions;
  19. 将缓存写入磁盘时的写入选项,默认为`NSDataWritingAtomic`,但是可以设置为“NSDataWritingWithoutOverwriting”以防止覆盖现有文件
  20. 2、SDImageCache类
  21. 缓存的核心类,只要管理内存缓存和磁盘缓存
  22. SDImageCacheOptions 一些缓存的选项
  23. SDImageCacheConfig config配置对象
  24. memoryCache 内存缓存
  25. diskCache 磁盘缓存
  26. - (nonnull instancetype)initWithNamespace:(nonnull NSString *)ns
  27. diskCacheDirectory:(nullable NSString *)directory;
  28. 可以指定命名空间和沙盒目录中
  29. _diskCachePath = [directory stringByAppendingPathComponent:ns];
  30. 命名空间也就是保存图像的文件夹名字
  31. 一系列存储、查询、删除和清理缓存等方法
  32. 缓存相关信息
  33. @property (nonatomic, strong, nullable) dispatch_queue_t ioQueue;
  34. 读写串行队列
  35. 监听
  36. UIApplicationWillTerminateNotification
  37. UIApplicationDidEnterBackgroundNotification
  38. SDImageCacheConfig