iOS之SDWebImage詳解

一. SDWebImage介紹

  1. SDWebImage 是目前最流行、使用最廣泛的第三方圖片處理框架,它不僅能夠異步加載網(wǎng)絡(luò)圖片,還提供了一套圖片緩存管理機(jī)制(內(nèi)存緩存+磁盤(pán)緩存),功能非常強(qiáng)大。
  2. github托管地址:https://github.com/rs/SDWebImage
  3. 基本原理:
    • 當(dāng)使用SDWebImage獲取網(wǎng)絡(luò)圖片時(shí),SDWebImage并不是直接發(fā)起網(wǎng)絡(luò)請(qǐng)求,而是先從緩存中查找圖片是否已經(jīng)下載
  • 首先檢查內(nèi)存緩存,如果內(nèi)存中有,直接返回image,如果沒(méi)有,再?gòu)拇疟P(pán)中查找是否有圖片緩存,如果磁盤(pán)讀取到了圖片,會(huì)將圖片添加到內(nèi)存中然后返回(如果內(nèi)存空間不足,會(huì)先清理內(nèi)存緩存)
  • 如果內(nèi)存和磁盤(pán)均沒(méi)有圖片緩存,則進(jìn)行圖片下載,下載完成后刷新UI并將圖片進(jìn)行內(nèi)存緩存和磁盤(pán)緩存(如果內(nèi)存空間不足,會(huì)先清理內(nèi)存緩存)

二. SDWebImage 的使用

在SD的使用中有一下幾個(gè)重要的類(lèi):

SDWebImageDownloader
SDWebImageManager
SDImageCache
UIButton+WebCache
UIImageView+WebCache

1. UIImageView+WebCache

以下是常用的幾個(gè)加載網(wǎng)絡(luò)圖片的方法:

- sd_setImageWithURL:
- sd_setImageWithURL: placeholderImage:
- sd_setImageWithURL: placeholderImage: options:
  以及添加閉包的方法,如 
- sd_setImageWithURL: placeholderImage: completed:

其實(shí),上面所有的方法都會(huì)調(diào)用:
- sd_setImageWithURL: placeholderImage: options: progress: completed:

下面我們看一下主要參數(shù)的含義:

  • placeholderImage:給一張默認(rèn)圖片,先使用默認(rèn)圖片,當(dāng)圖片加載完成后再替換
  • options: 選擇加載圖片的方式,SDWebImageOptional枚舉類(lèi)型
SDWebImageRetryFailed = 1 << 0:系統(tǒng)默認(rèn)一張圖片下載失敗后,會(huì)把該圖片加入失敗的黑名單里,如果不傳遞該option,則下次下載同樣的url時(shí)直接返回失敗。如果傳入該option,那么即使該圖片之前下載失敗了,也會(huì)再次進(jìn)行下載
SDWebImageLowPriority = 1 << 1:表示低優(yōu)先級(jí),UI交互期間可能會(huì)延遲下載,比如當(dāng)UIScrollView在減速時(shí)延遲下載
SDWebImageHighPriority = 1 << 8:表示高優(yōu)先級(jí),優(yōu)先下載
SDWebImageCacheMemoryOnly = 1 << 2:只進(jìn)行內(nèi)存緩存,不做磁盤(pán)緩存
SDWebImageProgressiveDownload = 1 << 3: 表示漸進(jìn)式的下載和顯示,SD默認(rèn)是把圖片全部下載后再顯示出來(lái),但是傳入該參數(shù)可以做到下載一部分圖片后先顯示這一部分,也就是邊下載邊顯示,如加載一個(gè)人體的照片,先看到頭,再看到肩膀,最后看到腿。當(dāng)然這種下載圖片的方式需要服務(wù)器的支持才行。
SDWebImageRefreshCached = 1 << 4:刷新緩存
SDWebImageContinueInBackground = 1 << 5:APP進(jìn)入后臺(tái)后繼續(xù)下載
SDWebImageAllowInvalidSSLCertificates = 1 << 7:允許使用無(wú)效的SSL證書(shū)
SDWebImageDelayPlaceholder = 1 << 9:延遲占位符
SDWebImageTransformAnimatedImage = 1 << 10:改變動(dòng)畫(huà)形象
  • completed: 用block 可以在圖片加載完成之后做些事情

2. UIButton+WebCache

UIButton幾乎和上面介紹的UIImageView的設(shè)置方法是相同的,只是UIButton可以給按鈕設(shè)置不同狀態(tài)(Normal、Highlighted、Disabled、Selected)的圖片和背景圖片。

3. SDImageCache 圖片緩存管理

  • 內(nèi)存緩存清理時(shí)機(jī):內(nèi)存報(bào)警或者APP退出后臺(tái)或者關(guān)閉APP,都會(huì)進(jìn)行緩存清理。
  • 磁盤(pán)緩存清理時(shí)機(jī):SDImageCache會(huì)檢查圖片的有效期,默認(rèn)是7天,如果過(guò)期則刪除。 另如果你設(shè)置了
    最大的圖片存儲(chǔ)空間,那么系統(tǒng)也會(huì)在同一時(shí)間點(diǎn)做檢查并清理,即使未過(guò)期,也會(huì)清理一些,按照文件創(chuàng)建的時(shí)間來(lái)排序做清理,更早創(chuàng)建的優(yōu)先被清理。
  • 手動(dòng)清理緩存常用方法:
SDImageCache.shared().clearDisk()  //清理所有的磁盤(pán)緩存
SDImageCache.shared().clearMemory() //清理所有的內(nèi)存緩存
SDImageCache.shared().removeImageForKey: key  //清理內(nèi)存和磁盤(pán)中特定key對(duì)應(yīng)的圖片緩存
SDImageCache.shared().removeImageForKey: key fromDisk //清理內(nèi)存中特定key對(duì)應(yīng)的圖片緩存,是否清楚磁盤(pán)緩存取決于fromDisk值
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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