Kingfisher源码解析

先上流程图


Kingfisher结构流程图.png

kf属性的由来
通过实现KingfiserCompatibleValue协议

extension Image: KingfiserCompatibleValue { }
extension KingfiserCompatibleValue {
    ///获取Kingfisher兼容类型的名称空间占位符。
    public var kf: KingfisherWrapper<Self> {
        get { return KingfisherWrapper(self) }
        set { }
    }
}
/// 对kingfisher 兼容类型的包装器. 这类型为kingfisher的便利初始化方法提供了一个扩展点
public struct KingfisherWrapper<Base> {
    public let base: Base
    public init(_ base: Base) {
        self.base = base
    }
}

然后再通过扩展KingfisherWrapper提供了setImage的方法

KingfisherManager可以说是Kingfisher的核心,它连接Kingfisher的下载和缓存链接ImageDownloaderImageCache;提供了一个一系列的方便的方法,去执行Kingfisher的任务。
先看初始化方法:

init(downloader: ImageDownloader, cache: ImageCache) {
        self.downloader = downloader
        self.cache = cache
        let processQueueName = "com.onevcat.Kingfisher.KingfisherManager.processQueue.\(UUID().uuidString)"
        processingQueue = .dispath(DispatchQueue(label: processQueueName))
    }

直接初始化ImageDownloaderImageCache

检索图片

  func retrieveImage(with source: Source, options: KingfisherParedOptionsInfo, progressBlock: DownloadProgressBlock? = nil, completionHandler: ((Result<RetrieveImageResult, KingfisherError>) -> Void)?) -> DownloadTask? {
        if options.forceRefresh {
            return loadAndCacheImage(source: source, options: options, completionHandler: completionHandler)
        } else {
            let loadedFromCache = retrieveImageFromCache(source: source, options: options, completionHandler: completionHandler)
            if loadedFromCache {
                return nil
            }
            if options.onlyFromCache {
                let error = KingfisherError.cacheError(reason: .imageNotExisting(key: source.cacheKey))
                completionHandler?(.failure(error))
                return nil
            }
            
            return loadAndCacheImage(source: source, options: options, progressBlock: progressBlock, completionHandler: completionHandler)
        }
    }

利用ImageCache检索图片,利用ImageDownloader下载图片

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容