Kingfisher源碼解析系列辆飘,由于水平有限婶博,哪里有錯且预,肯請不吝賜教
- Kingfisher源碼解析之使用
- Kingfisher源碼解析之Options解釋
- Kingfisher源碼解析之加載流程
- Kingfisher源碼解析之加載動圖
- Kingfisher源碼解析之ImageCache
- Kingfisher源碼解析之Processor和CacheSerializer
- Kingfisher源碼解析之ImagePrefetcher
- targetCache,originalCache
- 類型ImageCache,Kingfisher中的緩存管理器,提供內(nèi)存和磁盤緩存
- targetCache最終展示出來的緩存管理器
- originalCache原始數(shù)據(jù)的緩存管理器
- 默認(rèn)值都為nil给僵,為nil時毫捣,使用ImageCache(name: "default")
- downloader
- 類型ImageDownloader,圖片下載器帝际,提供圖片下載的功能
- 默認(rèn)值為nil蔓同,為nil時,使用ImageDownloader(name: "default")
- downloadPriority 下載優(yōu)先級
- transition
- 類型ImageTransition蹲诀,默認(rèn)是為ImageTransition.none
- 為imageView顯示image的時候提供過渡動畫
- forceTransition
- 類型為Bool斑粱,默認(rèn)值false
- 是否強制使用過渡動畫,當(dāng)值為true時则北,transition不為.none時就使用過渡動畫痕慢,當(dāng)值為false時掖举,只有transition不為.none并且不使用緩存時,才使用緩存動畫
- forceRefresh 是否強制刷新方篮,若值為true恭取,則不使用緩存
- fromMemoryCacheOrRefresh 當(dāng)值為true時熄守,刷新的時候裕照,若使用緩存晋南,則只使用內(nèi)存緩存羔砾,不去磁盤緩存
- cacheMemoryOnly 是否只使用內(nèi)存緩存
- onlyFromCache 是否只從緩存中加載
- backgroundDecode 是否在子線程去解碼
- preloadAllAnimationData
- 是否預(yù)加載GIF圖每一幀畫面,默認(rèn)值為false
- 若使用UIImageView.setImage(),去加載圖片,則會被強制設(shè)置成true政溃,因為
@objc extension UIImageView { func shouldPreloadAllAnimation() -> Bool { return true } } public func setImage( with source: Source?, placeholder: Placeholder? = nil, options: KingfisherOptionsInfo? = nil ... -> DownloadTask? { ... //若shouldPreloadAllAnimation()的值為true //則把preloadAllAnimationData設(shè)為true //而ImageView中的shouldPreloadAllAnimation()一直為true if base.shouldPreloadAllAnimation() { options.preloadAllAnimationData = true } ... }
- onlyLoadFirstFrame 若圖片是GIF圖時董虱,是否只顯示第一幀
- callbackQueue,processingQueue
- callbackQueue,圖片處理結(jié)束之后,回調(diào)所在的隊列云头,默認(rèn)值mainCurrentOrAsync
- processingQueue淫半,處理圖片時所在的隊列,比如利用processor給圖片添加圓角等操作時昏滴,所在的隊列砌溺,默認(rèn)使用一個串行的子隊列
- 一共有四個值可選擇.mainAsync,.mainCurrentOrAsync,.untouch,.dispatch(DispatchQueue)
- .mainAsync主線程中異步執(zhí)行
- .mainCurrentOrAsync规伐,若當(dāng)前線程是主線程,則直接執(zhí)行鲜棠,否則在主線程異步執(zhí)行
- .untouch 不改變當(dāng)前所在的線程
- .dispatch(DispatchQueue) 在指定的隊列中執(zhí)行
- requestModifier 發(fā)送請求時對原始的請求進(jìn)行修改豁陆,返回新的Request
- redirectHandler 當(dāng)請求發(fā)生重定向是盒音,自定義的一些處理
- processor 加工者祥诽,自定義data|image轉(zhuǎn)成image的邏輯雄坪,
- imageModifier image修飾器屯蹦,對image做一些修改绳姨,比如返回image.withRenderingMode(renderingMode)
- cacheSerializer 定義圖片序列化和反序列化
- keepCurrentImageWhileLoading 當(dāng)加載一個新圖時,是否要保持當(dāng)前的圖片
- cacheOriginalImage 是否要緩存原始的數(shù)據(jù)
- onFailureImage 加載失敗時阔挠,要展示的圖片
- alsoPrefetchToMemory 預(yù)加載時,需要從磁盤加載時谒亦,是否也需要同步到內(nèi)存中
- loadDiskFileSynchronously 從磁盤中加載時竭宰,是否同步的去加載
- memoryCacheExpiration份招,diskCacheExpiration 設(shè)置內(nèi)存切揭、磁盤緩存過期時間
- memoryCacheAccessExtendingExpiration
- 當(dāng)從內(nèi)存锁摔、磁盤中取圖片時廓旬,往后延長過期時間的策略
- 有以下幾個值:.none,.cacheTime,.expirationTime(_ expiration: StorageExpiration)
- .none保持原來的過期時間
- .cacheTime 設(shè)置過期時間為當(dāng)前時間加上原來的過期時間
- .expirationTime(_ expiration: StorageExpiration) 設(shè)置過期時間到指定時間
- alternativeSources 當(dāng)加載失敗時,可供替代的數(shù)據(jù)源
- onDataReceived 接收到數(shù)據(jù)時谐腰,需要回調(diào)時,可設(shè)置此屬性十气,比如setImage時設(shè)置的DownloadProgressBlock,就是在里面封裝了此屬性