一. SDWebImage介紹
- SDWebImage 是目前最流行硫戈、使用最廣泛的第三方圖片處理框架,它不僅能夠異步加載網(wǎng)絡(luò)圖片酌壕,還提供了一套圖片緩存管理機(jī)制(內(nèi)存緩存+磁盤緩存)掏愁,功能非常強(qiáng)大。
- github托管地址:https://github.com/rs/SDWebImage
- 基本原理:
- 當(dāng)使用SDWebImage獲取網(wǎng)絡(luò)圖片時(shí)卵牍,SDWebImage并不是直接發(fā)起網(wǎng)絡(luò)請(qǐng)求果港,而是先從緩存中查找圖片是否已經(jīng)下載
- 首先檢查內(nèi)存緩存,如果內(nèi)存中有糊昙,直接返回image辛掠,如果沒有,再?gòu)拇疟P中查找是否有圖片緩存释牺,如果磁盤讀取到了圖片萝衩,會(huì)將圖片添加到內(nèi)存中然后返回(如果內(nèi)存空間不足,會(huì)先清理內(nèi)存緩存)
- 如果內(nèi)存和磁盤均沒有圖片緩存没咙,則進(jìn)行圖片下載猩谊,下載完成后刷新UI并將圖片進(jìn)行內(nèi)存緩存和磁盤緩存(如果內(nèi)存空間不足,會(huì)先清理內(nèi)存緩存)
二. SDWebImage 的使用
在SD的使用中有一下幾個(gè)重要的類:
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枚舉類型
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)存緩存,不做磁盤緩存
SDWebImageProgressiveDownload = 1 << 3: 表示漸進(jìn)式的下載和顯示合敦,SD默認(rèn)是把圖片全部下載后再顯示出來初橘,但是傳入該參數(shù)可以做到下載一部分圖片后先顯示這一部分,也就是邊下載邊顯示,如加載一個(gè)人體的照片保檐,先看到頭耕蝉,再看到肩膀,最后看到腿夜只。當(dāng)然這種下載圖片的方式需要服務(wù)器的支持才行垒在。
SDWebImageRefreshCached = 1 << 4:刷新緩存
SDWebImageContinueInBackground = 1 << 5:APP進(jìn)入后臺(tái)后繼續(xù)下載
SDWebImageAllowInvalidSSLCertificates = 1 << 7:允許使用無效的SSL證書
SDWebImageDelayPlaceholder = 1 << 9:延遲占位符
SDWebImageTransformAnimatedImage = 1 << 10:改變動(dòng)畫形象
- 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)行緩存清理。
- 磁盤緩存清理時(shí)機(jī):SDImageCache會(huì)檢查圖片的有效期粘茄,默認(rèn)是7天签舞,如果過期則刪除。 另如果你設(shè)置了
最大的圖片存儲(chǔ)空間柒瓣,那么系統(tǒng)也會(huì)在同一時(shí)間點(diǎn)做檢查并清理儒搭,即使未過期,也會(huì)清理一些芙贫,按照文件創(chuàng)建的時(shí)間來排序做清理搂鲫,更早創(chuàng)建的優(yōu)先被清理。 - 手動(dòng)清理緩存常用方法:
SDImageCache.shared().clearDisk() //清理所有的磁盤緩存
SDImageCache.shared().clearMemory() //清理所有的內(nèi)存緩存
SDImageCache.shared().removeImageForKey: key //清理內(nèi)存和磁盤中特定key對(duì)應(yīng)的圖片緩存
SDImageCache.shared().removeImageForKey: key fromDisk //清理內(nèi)存中特定key對(duì)應(yīng)的圖片緩存磺平,是否清楚磁盤緩存取決于fromDisk值