1,從內(nèi)存中(字典)找圖片(當這個圖片在本次程序中加載過),找到直接使用。
2,從沙盒中找,找到直接使用,緩存到內(nèi)存。
3,從網(wǎng)絡上獲取,使用,緩存到內(nèi)存,緩存到沙盒。
SDWebImage中為UIView提供了一個分類叫做 WebCache,這個分類同時提供了很多類似的方法,這些最終會調(diào)用一個同時具有optionProgressBlock completionBlock的方法,而這個類最終被調(diào)用的方法會首先檢查是否傳入了placeholderImage以及對應的參數(shù),并設置placeholderImage。
然后,會獲取SDWebImageManager中的單例調(diào)用一個downloadImageWithURL:的方法獲取圖片,而這個manager獲取圖片的過程大體上分為兩部分,它首先會在SDWebImageCache中尋找圖片是否有對應的緩存,它會以URL作為數(shù)據(jù)的索引先在內(nèi)存中尋找是否有對應的緩存,如果緩存未命中就會在磁盤中利用MD5處理過的Key來繼續(xù)查詢對應的數(shù)據(jù),如果找到了,就會把磁盤中的緩存?zhèn)浞莸絻?nèi)存中。
然而,假設我們在內(nèi)存和磁盤緩存中都沒有命中,那么manager就會調(diào)用它特有的一個SDWebImageDownloader對象的方法downloadImageWithURL:來下載圖片,這個方法會在執(zhí)行的過程中調(diào)用另一個方法addProgressCallback:andCompletedBlock:forURL:createCallback:來存儲下載過程中和下載完成的回調(diào),當回調(diào)塊是第一次添加的時候,方法會實例化一個NSMutableURLRequest和SDWebImageDownloaderOperation,并將后者加入Downloader持有的下載隊列開始圖片的異步下載。而在圖片下載完成之后,就會在主線程設置image屬性,完成整個圖像的異步下載和配置。