SDWebImage 中為 UIImageView 提供了一個(gè)分類UIImageView+WebCache.h, 這個(gè)分類中有一個(gè)最常用的接口sd_setImageWithURL:placeholderImage:,會(huì)在真實(shí)圖片出現(xiàn)前會(huì)先顯示占位圖片声旺,當(dāng)真實(shí)圖片被加載出來(lái)后再替換占位圖片栈暇。
加載圖片的過(guò)程大致如下:
- 首先會(huì)在 SDWebImageCache 中尋找圖片是否有對(duì)應(yīng)的緩存, 它會(huì)以u(píng)rl 作為數(shù)據(jù)的索引先在內(nèi)存中尋找是否有對(duì)應(yīng)的緩存
- 如果緩存未找到就會(huì)利用通過(guò)MD5處理過(guò)的key來(lái)繼續(xù)在磁盤(pán)中查詢對(duì)應(yīng)的數(shù)據(jù), 如果找到了, 就會(huì)把磁盤(pán)中的數(shù)據(jù)加載到內(nèi)存中,并將圖片顯示出來(lái)
- 如果在內(nèi)存和磁盤(pán)緩存中都沒(méi)有找到美莫,就會(huì)向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求桐愉,開(kāi)始下載圖片
- 下載后的圖片會(huì)加入緩存中垢夹,并寫(xiě)入磁盤(pán)中
- 整個(gè)獲取圖片的過(guò)程都是在子線程中執(zhí)行,獲取到圖片后回到主線程將圖片顯示出來(lái)
SDWebImage原理:
調(diào)用類別的方法:
- 從內(nèi)存(字典)中找圖片(當(dāng)這個(gè)圖片在本次使用程序的過(guò)程中已經(jīng)被加載過(guò))靶壮,找到直接使用怔毛。
- 從沙盒中找(當(dāng)這個(gè)圖片在之前使用程序的過(guò)程中被加載過(guò)),找到使用腾降,緩存到內(nèi)存中拣度。
- 從網(wǎng)絡(luò)上獲取,使用螃壤,緩存到內(nèi)存蜡娶,緩存到沙盒。
更多:iOS面試題合集