0%

Kingfisher源码解析之Options解释

Kingfisher 源码解析系列,由于水平有限,哪里有错,肯请不吝赐教

  1. targetCache,originalCache

    • 类型 ImageCache,Kingfisher 中的缓存管理器,提供内存和磁盘缓存
    • targetCache 最终展示出来的缓存管理器
    • originalCache 原始数据的缓存管理器
    • 默认值都为 nil,为 nil 时,使用 ImageCache(name: “default”)
  2. downloader

    • 类型 ImageDownloader,图片下载器,提供图片下载的功能
    • 默认值为 nil,为 nil 时,使用 ImageDownloader(name: “default”)
  3. downloadPriority 下载优先级

  4. transition

    • 类型 ImageTransition,默认是为 ImageTransition.none
    • 为 imageView 显示 image 的时候提供过渡动画
  5. forceTransition

    • 类型为 Bool,默认值 false
    • 是否强制使用过渡动画,当值为 true 时,transition 不为.none 时就使用过渡动画,当值为 false 时,只有 transition 不为.none 并且不使用缓存时,才使用缓存动画
  6. forceRefresh 是否强制刷新,若值为 true,则不使用缓存

  7. fromMemoryCacheOrRefresh 当值为 true 时,刷新的时候,若使用缓存,则只使用内存缓存,不去磁盘缓存

  8. cacheMemoryOnly 是否只使用内存缓存

  9. waitForCache 是否等待缓存完成,再调用回调

  10. onlyFromCache 是否只从缓存中加载

  11. backgroundDecode 是否在子线程去解码

  12. preloadAllAnimationData

    • 是否预加载 GIF 图每一帧画面,默认值为 false
    • 若使用 UIImageView.setImage(),去加载图片,则会被强制设置成 true,因为
    1
     @objc extension UIImageView {
    2
        func shouldPreloadAllAnimation() -> Bool { return true }
    3
     }
    4
    5
     public func setImage(
    6
        with source: Source?,
    7
        placeholder: Placeholder? = nil,
    8
        options: KingfisherOptionsInfo? = nil ...
    9
       -> DownloadTask? {
    10
             ...
    11
            //若shouldPreloadAllAnimation()的值为true
    12
            //则把preloadAllAnimationData设为true
    13
            //而ImageView中的shouldPreloadAllAnimation()一直为true
    14
             if base.shouldPreloadAllAnimation() {
    15
                options.preloadAllAnimationData = true
    16
             }
    17
            ...
    18
    }
  13. onlyLoadFirstFrame 若图片是 GIF 图时,是否只显示第一帧

  14. callbackQueue,processingQueue

    • callbackQueue,图片处理结束之后,回调所在的队列,默认值 mainCurrentOrAsync
    • processingQueue,处理图片时所在的队列,比如利用 processor 给图片添加圆角等操作时,所在的队列,默认使用一个串行的子队列
    • 一共有四个值可选择.mainAsync,.mainCurrentOrAsync,.untouch,.dispatch(DispatchQueue)
    • .mainAsync 主线程中异步执行
    • .mainCurrentOrAsync,若当前线程是主线程,则直接执行,否则在主线程异步执行
    • .untouch 不改变当前所在的线程
    • .dispatch(DispatchQueue) 在指定的队列中执行
  15. requestModifier 发送请求时对原始的请求进行修改,返回新的 Request

  16. redirectHandler 当请求发生重定向是,自定义的一些处理

  17. processor 加工者,自定义 data|image 转成 image 的逻辑,

  18. imageModifier image 修饰器,对 image 做一些修改,比如返回 image.withRenderingMode(renderingMode)

  19. cacheSerializer 定义图片序列化和反序列化

  20. keepCurrentImageWhileLoading 当加载一个新图时,是否要保持当前的图片

  21. cacheOriginalImage 是否要缓存原始的数据

  22. onFailureImage 加载失败时,要展示的图片

  23. alsoPrefetchToMemory 预加载时,需要从磁盘加载时,是否也需要同步到内存中

  24. loadDiskFileSynchronously 从磁盘中加载时,是否同步的去加载

  25. memoryCacheExpiration,diskCacheExpiration 设置内存、磁盘缓存过期时间

  26. memoryCacheAccessExtendingExpiration

    • 当从内存、磁盘中取图片时,往后延长过期时间的策略
    • 有以下几个值:.none,.cacheTime,.expirationTime(_ expiration: StorageExpiration)
    • .none 保持原来的过期时间
    • .cacheTime 设置过期时间为当前时间加上原来的过期时间
    • .expirationTime(_ expiration: StorageExpiration) 设置过期时间到指定时间
  27. alternativeSources 当加载失败时,可供替代的数据源

  28. onDataReceived 接收到数据时,需要回调时,可设置此属性,比如 setImage 时设置的 DownloadProgressBlock,就是在里面封装了此属性