SDWebImage源碼解讀
看了UIImageView+WebCache這個分類里面常見[UIImageView sd_setImageWithURL:urplaceholderImage:]方法的內(nèi)部實現(xiàn)的過程,有所收獲.
內(nèi)部實現(xiàn)流程圖.png
-
首先該方法最終會調(diào)用下面方法實現(xiàn)
主方法.png -
進(jìn)入主方法里面, 如果先前設(shè)置UIImageView的下載操作未完成,取消UIImageView先前下載操作, 因為我要給UIImageView設(shè)置新的圖片 , 完全不用去考慮先前給UIImageView設(shè)置了什么圖片.
取消先前的下載操作.png
取消下載操作的具體實現(xiàn).png
-然后創(chuàng)建一個新的圖片下載操作,然后設(shè)置到UIView的一個自定義字典屬性(operationDictionary)中
創(chuàng)建一個下載任務(wù).png -
創(chuàng)建圖片下載操作的實現(xiàn)過程是: 根據(jù)給定的URL生成一個唯一的Key, 根據(jù)key先從內(nèi)存中讀取圖片緩存撒顿,若沒有命中內(nèi)存緩存則讀取磁盤緩存离熏,如果磁盤緩存命中芍耘,那么將磁盤緩存讀到內(nèi)存中成為內(nèi)存緩存址遇。如果都沒有命中緩存的話,那么就在執(zhí)行的doneBlock中開始下載圖片斋竞。
queryCacheOperationForKey.png
key獲取圖片.png
如果內(nèi)存和磁盤中沒有緩存,開啟下載
下載.png