流程篇
最近為了給公司做SDWebImage分享,細細的對其研讀了一番悬蔽,本章節(jié)先大致說一下它的流程扯躺。
一,基本流程
借用一下作者的圖蝎困,SDWebImage包裝的一個基本過程:
1. ?UIImageView的sd_setImageWithURL方法調(diào)用UIView的sd_internalSetImageWithURL方法录语。
2. ?sd_internalSetImageWithURL調(diào)用SDWebImageManager的loadImageWithURL方法。
3. ?loadImageWithURL調(diào)用SDImageCache的queryCacheOperationForKey方法禾乘。該方法通過方法體判斷是否有緩存(內(nèi)存澎埠,磁盤),通過它的一個SDCacheQueryCompletedBlock(block)參數(shù)回調(diào)來處理方法體的結(jié)果(沒有緩存時開始下載圖片(SDWebImageDownloader的downloadImageWithURL方法))始藕。
4. ?downloadImageWithURL調(diào)用addProgressCallback方法去創(chuàng)建下載蒲稳。通過該方法的方法體來判斷該圖片是否已經(jīng)被加入下載。沒有加入的話通過它的一個createCallback(block)參數(shù)回調(diào)來處理方法體的結(jié)果(創(chuàng)建一個新的下載(SDWebImageDownloaderOperation的initWithRequest方法))伍派。
5. ?通過SDWebImageDownloaderOperation獲取的下載結(jié)果在把下載結(jié)果一層一層的向前回調(diào)江耀,最后傳給UIImageView的sd_setImageWithURL方法供我們使用。
二诉植,精妙的思想祥国,用法
1. ?作者接口設(shè)計層層深入,實現(xiàn)的方法只有一個值得我們借鑒倍踪。
2. ?在每一個下載前首先取消掉該控件上的當(dāng)前的下載系宫,為了防止控件復(fù)用時造成的圖片錯亂。具體的解決方法是每個控件綁定一個NSMutableDictionary(使用字典主要是為了區(qū)分控件的狀態(tài))建车,具體的實現(xiàn)是UIView+WebCacheOperation扩借。
3. ?SDWebImageManager通過NSMutableSet存儲failedURLs(NSMutableSet查找的效率比NSArray高出很多,NSMutableSet存儲的數(shù)據(jù)是不能重復(fù)的缤至,NSMutableSet是無序的)潮罪。
4. ?定義一個對象存儲一些操作和屬性康谆,服務(wù)于功能類,減少該類的屬性嫉到,有利于維護沃暗,和代碼的可讀性。?