iOS開發之SDWebImage源碼查看摘要

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方法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,818評論 18 139
  • 前不久做了一個生成快照的需求,其中用到 SDWebImage 來下載圖片,在使用該框架的過程中也遇到了一些問題,索...
    ShannonChenCHN閱讀 14,115評論 12 241
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,711評論 25 708
  • 趕路的東西南北, 等車的一列長隊。 胡琴聲泣嘈雜中, 天下何處無傷悲。
    珠江潮平閱讀 134評論 3 7
  • 今早叫了邢羽菲一遍又一遍, 已經六點十分了,還說:“再睡一會兒。”還叫不起來了,直接把頭蒙上了。又一會兒六點二十五...
    羽菲傲霖閱讀 195評論 0 0