美文网首页
Kingfisher源码解析

Kingfisher源码解析

作者: Mannyao | 来源:发表于2020-08-25 09:10 被阅读0次

    先上流程图


    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下载图片

    相关文章

      网友评论

          本文标题:Kingfisher源码解析

          本文链接:https://www.haomeiwen.com/subject/wfvnjktx.html