SDWebImage深究

像我這樣的菜鳥剛開始用SDWebImage只會用sd_setImageWithUrl:。認為緩存圖片就夠了览绿,但是SDWebImage有強大的東西我們還沒有發(fā)現窿祥,來一探究竟~

最簡單的,sd_setBackGroundImageWithUrl: (PS:各位大神不要打我, 因為我之前并不知道SDWebImage是可以緩存button的圖片) 緩存button背景圖片 當然還能聯(lián)想出包含titleColor的方法

其次我們說一下SDWebImage的精髓 :“options所有選項"

options 想必有些菜鳥跟我一樣也沒用過這個東西吧

//失敗后重試
SDWebImageRetryFailed = 0,
//UI交互期開始下載庇麦,導致延遲下載比如UIScrollView減速
SDWebImageLowPriority = 1 
//只進行內存緩存
SDWebImageCacheMemoryOnly = 2
//這個標志可以漸進式下載计技,顯示的圖像是在逐步下載
SDWebImageProgressiveDownload = 3
//刷新緩存
SDWebImageRefreshCached = 4
//后臺下載
SDWebImageContinueInBackground = 5
//NSMUtableURLRequest.HTTPShouldHandleCookies = YES
SDWebImageHandleCookies = 6
//允許使用無效的SSL證書
SDWebImageAllowInvalidSSLCertificates = 7
//優(yōu)化下載
SDWebImageHighPriority = 8
//延遲占位符
SDWebImageDelayPlaceholder = 9,
//改變動畫形象
SDWebImageTransformAnimatedImage = 10

SDWebImage內部實現過程

1.入口 setImageWithURL:placeholderImage:options: 會先把 placeholderImage 顯示,然后 SDWebImageManager 根據 URL 開始處理圖片山橄。
2.進入 SDWebImageManager-downloadWithURL:delegate:options:userInfo:垮媒,交給 SDImageCache 從緩存查找圖片是否已經下載 queryDiskCacheForKey:delegate:userInfo:.
3.先從內存圖片緩存查找是否有圖片,如果內存中已經有圖片緩存航棱,SDImageCacheDelegate 回調 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager睡雇。
4.SDWebImageManagerDelegate 回調 webImageManager:didFinishWithImage: 到 UIImageView+WebCache 等前端展示圖片。
5.如果內存緩存中沒有饮醇,生成 NSInvocationOperation 添加到隊列開始從硬盤查找圖片是否已經緩存它抱。
6.根據 URLKey 在硬盤緩存目錄下嘗試讀取圖片文件。這一步是在 NSOperation 進行的操作朴艰,所以回主線程進行結果回調 notifyDelegate:观蓄。
7.如果上一操作從硬盤讀取到了圖片,將圖片添加到內存緩存中(如果空閑內存過小呵晚,會先清空內存緩存)蜘腌。SDImageCacheDelegate 回調 imageCache:didFindImage:forKey:userInfo:。進而回調展示圖片饵隙。
8.如果從硬盤緩存目錄讀取不到圖片撮珠,說明所有緩存都不存在該圖片,需要下載圖片,回調 imageCache:didNotFindImageForKey:userInfo:芯急。
9.共享或重新生成一個下載器 SDWebImageDownloader 開始下載圖片勺届。
10.圖片下載由 NSURLConnection 來做,實現相關 delegate 來判斷圖片下載中娶耍、下載完成和下載失敗免姿。
11.connection:didReceiveData: 中利用 ImageIO 做了按圖片下載進度加載效果。
12.connectionDidFinishLoading: 數據下載完成后交給 SDWebImageDecoder 做圖片解碼處理榕酒。
13.圖片解碼處理在一個 NSOperationQueue 完成胚膊,不會拖慢主線程 UI。如果有需要對下載的圖片進行二次處理想鹰,最好也在這里完成紊婉,效率會好很多。
14.在主線程 notifyDelegateOnMainThreadWithInfo: 宣告解碼完成辑舷,imageDecoder:didFinishDecodingImage:userInfo: 回調給 SDWebImageDownloader喻犁。
15.imageDownloader:didFinishWithImage: 回調給 SDWebImageManager 告知圖片下載完成。
16.通知所有的 downloadDelegates 下載完成何缓,回調給需要的地方展示圖片肢础。
17.將圖片保存到 SDImageCache 中,內存緩存和硬盤緩存同時保存碌廓。寫文件到硬盤也在以單獨 NSInvocationOperation 完成传轰,避免拖慢主線程。
18.SDImageCache 在初始化的時候會注冊一些消息通知氓皱,在內存警告或退到后臺的時候清理內存圖片緩存路召,應用結束的時候清理過期圖片勃刨。
19.SDWI 也提供了 UIButton+WebCache 和 MKAnnotationView+WebCache波材,方便使用。
20.SDWebImagePrefetcher 可以預先下載圖片身隐,方便后續(xù)使用廷区。

最后給大家講一個比較有用的 在加載圖片時和完成加載時的可以做的方法

SDWebImageManager *manager = [SDWebImageManager sharedManager];
 
[manager downloadImageWithURL:imagePath2 options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
     
    NSLog(@"顯示當前進度");
     
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
     
    NSLog(@"下載完成");
}];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贾铝,隨后出現的幾起案子隙轻,更是在濱河造成了極大的恐慌,老刑警劉巖垢揩,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玖绿,死亡現場離奇詭異,居然都是意外死亡叁巨,警方通過查閱死者的電腦和手機斑匪,發(fā)現死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锋勺,“玉大人蚀瘸,你說我怎么就攤上這事狡蝶。” “怎么了贮勃?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵贪惹,是天一觀的道長。 經常有香客問我寂嘉,道長奏瞬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任泉孩,我火速辦了婚禮丝格,結果婚禮上,老公的妹妹穿的比我還像新娘棵譬。我一直安慰自己显蝌,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布订咸。 她就那樣靜靜地躺著曼尊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脏嚷。 梳的紋絲不亂的頭發(fā)上骆撇,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音父叙,去河邊找鬼神郊。 笑死,一個胖子當著我的面吹牛趾唱,可吹牛的內容都是我干的涌乳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凶硅?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蒸辆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后析既,有當地人在樹林里發(fā)現了一具尸體躬贡,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年眼坏,在試婚紗的時候發(fā)現自己被綠了拂玻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纺讲,靈堂內的尸體忽然破棺而出擂仍,到底是詐尸還是另有隱情,我是刑警寧澤熬甚,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布逢渔,位于F島的核電站,受9級特大地震影響乡括,放射性物質發(fā)生泄漏肃廓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一诲泌、第九天 我趴在偏房一處隱蔽的房頂上張望盲赊。 院中可真熱鬧,春花似錦敷扫、人聲如沸哀蘑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绘迁。三九已至,卻和暖如春卒密,著一層夾襖步出監(jiān)牢的瞬間缀台,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工哮奇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留膛腐,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓鼎俘,卻偏偏與公主長得像哲身,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子而芥,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容