Kingfisher源碼解析系列,因爲水平有限,哪裏有錯,肯請不吝賜教緩存
- targetCache,originalCache
- 類型ImageCache,Kingfisher中的緩存管理器,提供內存和磁盤緩存
- targetCache最終展現出來的緩存管理器
- originalCache原始數據的緩存管理器
- 默認值都爲nil,爲nil時,使用ImageCache(name: "default")
- downloader
- 類型ImageDownloader,圖片下載器,提供圖片下載的功能
- 默認值爲nil,爲nil時,使用ImageDownloader(name: "default")
- downloadPriority 下載優先級
- transition
- 類型ImageTransition,默認是爲ImageTransition.none
- 爲imageView顯示image的時候提供過渡動畫
- forceTransition
- 類型爲Bool,默認值false
- 是否強制使用過渡動畫,當值爲true時,transition不爲.none時就使用過渡動畫,當值爲false時,只有transition不爲.none而且不使用緩存時,才使用緩存動畫
- forceRefresh 是否強制刷新,若值爲true,則不使用緩存
- fromMemoryCacheOrRefresh 當值爲true時,刷新的時候,若使用緩存,則只使用內存緩存,不去磁盤緩存
- cacheMemoryOnly 是否只使用內存緩存
- waitForCache 是否等待緩存完成,再調用回調
- onlyFromCache 是否只從緩存中加載
- backgroundDecode 是否在子線程去解碼
- preloadAllAnimationData
- 是否預加載GIF圖每一幀畫面,默認值爲false
- 若使用UIImageView.setImage(),去加載圖片,則會被強制設置成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設爲true
//而ImageView中的shouldPreloadAllAnimation()一直爲true
if base.shouldPreloadAllAnimation() {
options.preloadAllAnimationData = true
}
...
}
複製代碼
- onlyLoadFirstFrame 若圖片是GIF圖時,是否只顯示第一幀
- callbackQueue,processingQueue
- callbackQueue,圖片處理結束以後,回調所在的隊列,默認值mainCurrentOrAsync
- processingQueue,處理圖片時所在的隊列,好比利用processor給圖片添加圓角等操做時,所在的隊列,默認使用一個串行的子隊列
- 一共有四個值可選擇.mainAsync,.mainCurrentOrAsync,.untouch,.dispatch(DispatchQueue)
- .mainAsync主線程中異步執行
- .mainCurrentOrAsync,若當前線程是主線程,則直接執行,不然在主線程異步執行
- .untouch 不改變當前所在的線程
- .dispatch(DispatchQueue) 在指定的隊列中執行
- requestModifier 發送請求時對原始的請求進行修改,返回新的Request
- redirectHandler 當請求發生重定向是,自定義的一些處理
- processor 加工者,自定義data|image轉成image的邏輯,
- imageModifier image修飾器,對image作一些修改,好比返回image.withRenderingMode(renderingMode)
- cacheSerializer 定義圖片序列化和反序列化
- keepCurrentImageWhileLoading 當加載一個新圖時,是否要保持當前的圖片
- cacheOriginalImage 是否要緩存原始的數據
- onFailureImage 加載失敗時,要展現的圖片
- alsoPrefetchToMemory 預加載時,須要從磁盤加載時,是否也須要同步到內存中
- loadDiskFileSynchronously 從磁盤中加載時,是否同步的去加載
- memoryCacheExpiration,diskCacheExpiration 設置內存、磁盤緩存過時時間
- memoryCacheAccessExtendingExpiration
- 當從內存、磁盤中取圖片時,日後延長過時時間的策略
- 有如下幾個值:.none,.cacheTime,.expirationTime(_ expiration: StorageExpiration)
- .none保持原來的過時時間
- .cacheTime 設置過時時間爲當前時間加上原來的過時時間
- .expirationTime(_ expiration: StorageExpiration) 設置過時時間到指定時間
- alternativeSources 當加載失敗時,可供替代的數據源
- onDataReceived 接收到數據時,須要回調時,可設置此屬性,好比setImage時設置的DownloadProgressBlock,就是在裏面封裝了此屬性