Kingfisher源碼解析

先上流程圖


Kingfisher結(jié)構(gòu)流程圖.png

kf屬性的由來
通過實(shí)現(xiàn)KingfiserCompatibleValue協(xié)議

extension Image: KingfiserCompatibleValue { }
extension KingfiserCompatibleValue {
    ///獲取Kingfisher兼容類型的名稱空間占位符。
    public var kf: KingfisherWrapper<Self> {
        get { return KingfisherWrapper(self) }
        set { }
    }
}
/// 對kingfisher 兼容類型的包裝器. 這類型為kingfisher的便利初始化方法提供了一個擴(kuò)展點(diǎn)
public struct KingfisherWrapper<Base> {
    public let base: Base
    public init(_ base: Base) {
        self.base = base
    }
}

然后再通過擴(kuò)展KingfisherWrapper提供了setImage的方法

KingfisherManager可以說是Kingfisher的核心,它連接Kingfisher的下載和緩存鏈接ImageDownloaderImageCache;提供了一個一系列的方便的方法,去執(zhí)行Kingfisher的任務(wù)。
先看初始化方法:

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下載圖片

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容