SDWebImage源碼查看流程
UIImageView+WebCache
兩個方法
//從網絡獲取圖片并展示 創建一個下載操作,然后把這個操作設置為view的一個屬性,然后為UIImageView添加一個url的屬性,如果下載成功顯示圖片
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
//從緩存中讀取圖片、不走網絡請求(從緩存中獲取圖片,有就展示沒有展示占位圖片)
- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
//將下載的圖片數組動態播放
- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs
UIView+WebCacheOperation
//當創建一個下載操作的時候,吧對應的操作存儲為當前view的一個屬性(方便控制取消或者停止等操作)
- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key;
//取消對應的操作
- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key;
//刪除對應key的下載操作
- (void)sd_removeImageLoadOperationWithKey:(NSString *)key;
UIButton+WebCache
1、會通過運行時為Button添加一個 屬性
imageURLStorageKey:{state(buttonzhuangtai):對應的url}
2、在為UIView添加操作屬性時,
UIButtonImageOperation+state : operation
UIButtonBackgroundImageOperation+state: Operation
//下載對應狀態下的圖片
- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
//下載對應狀態下的背景圖片
- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
//取消對應狀態下的圖片下載
- (void)sd_cancelImageLoadForState:(UIControlState)state;
//取消對應狀態下的背景圖片下載
- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state;
SDImageManager
1、SDWebImageOptions下載選項
2、SDWebImageManagerDelegate代理
3、屬性
1.delegate(代理)
2.SDImageCache *imageCache(緩存)
3.SDWebImageDownloader *imageDownloader(下載器啊)
4.SDWebImageCacheKeyFilterBlock cacheKeyFilter(存儲的圖片key的生成規則)
4、API:
1. 下載圖片:(id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionWithFinishedBlock)completedBlock;
2. 存儲圖片:- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url;
3. 查詢圖片是否存在API
SDWebImageDownloader
頭文件
1、下載選項枚舉
2、下載順序枚舉
3、下載開始結束通知
4、下載進度、下載完成、request header生成規則block
5、屬性
1.是否在下載后、緩存后解壓圖片
2.最大并發數
3.當前下載數
4.下載超時時間
5.下載順序
6、設置http header的屬性和方法
7、下載圖片API
(id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url
options:(SDWebImageDownloaderOptions)options
progress:(SDWebImageDownloaderProgressBlock)progressBlock
completed:(SDWebImageDownloaderCompletedBlock)completedBlock;
8、下載隊列掛起API,取消所有下載操作API
源文件
1、屬性
1.下載隊列NSOperationQueue *downloadQueue
2.最后一個下載操作:NSOperation *lastAddedOperation
3.圖片下載回調數組 :NSMutableDictionary *URLCallbacks
4.圖片請求頭:NSMutableDictionary *HTTPHeaders
5.網絡請求響應處理隊列: dispatch_queue_t barrierQueue;
6.當前網絡會話:NSURLSession *session
2、主要是下載圖片API:
SDWebImageDownloaderOperation
頭文件
1、網絡請求的通知
extern NSString *const SDWebImageDownloadStartNotification;
extern NSString *const SDWebImageDownloadReceiveResponseNotification;
extern NSString *const SDWebImageDownloadStopNotification;
extern NSString *const SDWebImageDownloadFinishNotification;
2、網絡請求對象 :NSURLRequest *request
3、請求任務:NSURLSessionTask *dataTask
4、下載完是否解壓圖片:BOOL shouldDecompressImages
5、url認證:NSURLCredential *credential
6、下載選項:SDWebImageDownloaderOptions options
7、請求響應:NSURLResponse *response
8、初始化方法:
(id)initWithRequest:(NSURLRequest *)request
inSession:(NSURLSession *)session
options:(SDWebImageDownloaderOptions)options
progress:(SDWebImageDownloaderProgressBlock)progressBlock
completed:(SDWebImageDownloaderCompletedBlock)completedBlock
cancelled:(SDWebImageNoParamsBlock)cancelBlock;
源文件
1、初始化函數,初始化屬性
2、start函數(任務加到隊列中自動調用)
3、取消任務API
4、NSURLSessionDataDelegate 回調函數
SDImageCache
頭文件
1、緩存方式枚舉
2、查詢block,檢查是否在緩存block,計算文件個數和大小block
3、屬性
1、是否解壓圖片
2、是否禁用iCould
3、是在在內存中緩存圖片
4、最大內存存儲量
5、最大內存存儲圖片數量
6、最大緩存時間
7、最大緩存大小
4、初始化API
5、存儲圖片API
6、查詢API
7、清除API
8、獲取緩存路徑API
源文件
1、初始化API
initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory
2、獲取圖片緩存路徑API
cachePathForKey:(NSString *)key inPath:(NSString *)path
3、存儲圖片API:
storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk
4、查詢圖片API:
queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock
圖片分類
1、UIImage+GIF:解析gif
2、UIImage+WebP:解析webp(需要通過cocodpods導入libwebp庫)
3、UIImage+MultiFormat: 統一圖片解析入口,內部根據圖片類型調用不同的解析方法
4、NSData+ImageContentType: 獲取圖片data對應的類型信息(PNG、JPEG)
其它
1、SDWebImageCompat :定義了一些“宏”,還有一個縮放圖片函數
2、SDWebImageDecoder:圖片解碼
3、SDWebImageOperation: 定義了一個協議,有一個cancel方法