SDWebImage原理

1,從內(nèi)存中(字典)找圖片(當(dāng)這個圖片在本次程序中加載過),找到直接使用。
2,從沙盒中找,找到直接使用,緩存到內(nèi)存。
3,從網(wǎng)絡(luò)上獲取,使用,緩存到內(nèi)存,緩存到沙盒。

SDWebImage中為UIView提供了一個分類叫做 WebCache,這個分類同時提供了很多類似的方法,這些最終會調(diào)用一個同時具有optionProgressBlock completionBlock的方法,而這個類最終被調(diào)用的方法會首先檢查是否傳入了placeholderImage以及對應(yīng)的參數(shù),并設(shè)置placeholderImage。

然后,會獲取SDWebImageManager中的單例調(diào)用一個downloadImageWithURL:的方法獲取圖片,而這個manager獲取圖片的過程大體上分為兩部分,它首先會在SDWebImageCache中尋找圖片是否有對應(yīng)的緩存,它會以URL作為數(shù)據(jù)的索引先在內(nèi)存中尋找是否有對應(yīng)的緩存,如果緩存未命中就會在磁盤中利用MD5處理過的Key來繼續(xù)查詢對應(yīng)的數(shù)據(jù),如果找到了,就會把磁盤中的緩存?zhèn)浞莸絻?nèi)存中。

然而,假設(shè)我們在內(nèi)存和磁盤緩存中都沒有命中,那么manager就會調(diào)用它特有的一個SDWebImageDownloader對象的方法downloadImageWithURL:來下載圖片,這個方法會在執(zhí)行的過程中調(diào)用另一個方法addProgressCallback:andCompletedBlock:forURL:createCallback:來存儲下載過程中和下載完成的回調(diào),當(dāng)回調(diào)塊是第一次添加的時候,方法會實(shí)例化一個NSMutableURLRequest和SDWebImageDownloaderOperation,并將后者加入Downloader持有的下載隊(duì)列開始圖片的異步下載。而在圖片下載完成之后,就會在主線程設(shè)置image屬性,完成整個圖像的異步下載和配置。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言SDWebImage是一個很受歡迎的圖片緩存第三方庫,使用十分方便,只需一行代碼就可以實(shí)現(xiàn)設(shè)置占位圖以及在網(wǎng)絡(luò)...
    一劍孤城閱讀 12,337評論 1 16
  • 日常開發(fā)中,經(jīng)常需要下載網(wǎng)絡(luò)圖片,最常用到的第三方庫莫過于SDWebImage了,github托管地址https:...
    CALayer_Sai閱讀 429評論 0 3
  • 調(diào)用類別的方法: 從內(nèi)存中(字典)找圖片(當(dāng)這個圖片在本次程序加載過),找到直接使用; 從沙盒中找,找到直接使用,...
    iOS_Alex閱讀 269評論 0 0
  • 1、從內(nèi)存中(字典)找圖片(當(dāng)這個圖片在本次程序加載過),找到直接使用; 2、從沙盒中找,找到直接使用,緩存到內(nèi)存...
    niceSYT閱讀 425評論 0 1
  • 今夜我將所有孤獨(dú) 盡賦于詩上 可是朋友啊 我已看不見了麥田
    史牧閱讀 132評論 0 1

友情鏈接更多精彩內(nèi)容