SDWebImage原理

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

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

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

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

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

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

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

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