這篇文章翻譯自https://github.com/rs/SDWebImage 。目前,雖然AFNetworking也提供了圖片下載及緩存策略,但更專業(yè)的時(shí)候,圖片加載框架一般用SDWebImage,正如主流APP(如QQ和微信)會(huì)用到。當(dāng)然,只看官方文檔是不夠的,需要進(jìn)一步查閱源代碼方能理解SDWebImage的功能。
該庫(kù)提供了具有緩存支持的異步圖像下載器。為方便起見,我們?yōu)閁I元素例如UIImageView,UIButton,MKAnnotationView等類添加了categories。

1. 特征
- 為UIImageView,UIButton,MKAnnotationView的Categories添加了有關(guān)網(wǎng)絡(luò)圖像和高速緩存管理的Categories
- 異步圖像下載器
- 異步內(nèi)存+磁盤圖像緩存,它具有自動(dòng)緩存到期處理
- 后臺(tái)圖像解壓縮
- 保證相同的URL不會(huì)被下載多次
- 保證虛假URLs不會(huì)重復(fù)重試
- 保證主線程永遠(yuǎn)不會(huì)被阻止
- 好的性能!
- 使用GCD和ARC
2. 支持的圖像格式
- UIImage支持的圖像格式(JPEG,PNG,...)包括GIF
- WebP格式,包括動(dòng)畫WebP(使用WebP subspec)
3. 系統(tǒng)要求
- iOS 7.0或更高版本
- tvOS 9.0或更高版本
- watchOS 2.0或更高版本
- OS X 10.8或更高版本
- Xcode 7.3或更高版本
向后兼容性
- 對(duì)于iOS 5和6,使用3.7.6版本的任何版本
- 對(duì)于iOS <5.0,請(qǐng)使用最后2.0版本。
4. 入門指南
- 閱讀本自述文件
- 閱讀如何使用部分
- 閱讀文檔@ CocoaDocs
- 閱讀SDWebImage如何比X更好?
- 通過從Github下載項(xiàng)目或者使用CocoaPods嘗試更簡(jiǎn)單的方法來嘗試這個(gè)例子
pod try SDWebImage - 進(jìn)入安裝步驟
- 閱讀SDWebImage 4.0遷移指南,了解從3.x到4.x的更改
5. 誰使用它
找出誰使用SDWebImage并將您的應(yīng)用程序添加到列表中。
6. 交流
- 如果需要幫助,請(qǐng)使用stackoverflow。
(Tag'sdwebimage') - 如果你想問一個(gè)一般的問題,請(qǐng)使用Stack Overflow。
- 如果您發(fā)現(xiàn)錯(cuò)誤,請(qǐng)打開一個(gè)issue。
- 如果您有功能請(qǐng)求,請(qǐng)打開一個(gè)issue。
- 如果您想貢獻(xiàn),請(qǐng)?zhí)峤焕瓌?dòng)請(qǐng)求。
7. 如何使用
Objective-C:
#import <SDWebImage/UIImageView+WebCache.h>
...
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
Swift:
import SDWebImage
imageView.sd_setImage(with: URL(string: "http://www.domain.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))
- 有關(guān)如何使用庫(kù)和清除示例的詳細(xì)信息,請(qǐng)參閱詳細(xì)的如何使用
8. 動(dòng)畫圖像(GIF)支持
- 從4.0版本開始,我們依靠FLAnimatedImage來處理我們的動(dòng)畫圖像。
- 如果您使用cocoapods ,請(qǐng)?zhí)砑?code>pod 'SDWebImage/GIF' Cocapods到您的podfile。
- 要使用它,只需確保使用FLAnimatedImageView而不是UIImageView。
- 注意:仍然有一個(gè)向后兼容的功能,所以如果你仍然試圖用UIImageView加載一個(gè)GIF,它將只顯示第一幀作為靜態(tài)圖像。
- 重要提示:FLAnimatedImage僅適用于iOS平臺(tái),因此對(duì)于所有其他平臺(tái)(OS X,tvOS,watchOS),我們將回退到上述的向后兼容性。
9. 常見問題
9.1 UITableViewCell與使用動(dòng)態(tài)圖像的大小尺寸
UITableView根據(jù)單元格的第一個(gè)圖像集,確定圖像的大小尺寸。如果遠(yuǎn)程圖像的尺寸與占位符圖像的大小不同,您可能會(huì)遇到奇怪的變形縮放問題。以下文章提供了解決此問題的方法:http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/
9.2 處理圖像刷新
默認(rèn)情況下,SDWebImage執(zhí)行非常積極的緩存。它完全無視HTTP服務(wù)器返回的各種緩存控制頭,并緩存返回的圖像且不受時(shí)間限制。這意味著您的圖像URL是指向永遠(yuǎn)不會(huì)改變的圖像的靜態(tài)網(wǎng)址。如果指向的圖像發(fā)生變化,則網(wǎng)址的某些部分應(yīng)當(dāng)相應(yīng)更改。
如果您無法控制您正在使用的圖像服務(wù)器,那么當(dāng)內(nèi)容更新時(shí),您可能無法更改該URL。例如,F(xiàn)acebook頭像URL就是這種情況。在這種情況下,您可以使用該SDWebImageRefreshCached標(biāo)志。這將稍微降低性能,但這會(huì)重視HTTP緩存控制頭:
[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
options:SDWebImageRefreshCached];
9.3 添加一個(gè)進(jìn)度指示器
在你調(diào)用sd_setImageWithURL之前,添加代碼如下:
[imageView sd_setShowActivityIndicatorView:YES];
[imageView sd_setIndicatorStyle:UIActivityIndicatorViewStyleGray];
imageView.sd_setShowActivityIndicatorView(true)
imageView.sd_setIndicatorStyle(.Gray)
10. 安裝
在您的項(xiàng)目中使用SDWebImage有三種方法:
- 使用CocoaPods
- 使用Carthage
- 通過將項(xiàng)目復(fù)制到您的存儲(chǔ)庫(kù)中
10.1 使用CocoaPods安裝
CocoaPods是Objective-C的依賴管理器,它可以自動(dòng)化并簡(jiǎn)化在項(xiàng)目中使用第三方庫(kù)的過程。有關(guān)詳細(xì)信息,請(qǐng)參閱“ 入門”
部分。
10.1.1 Podfile
platform :ios, '7.0'
pod 'SDWebImage', '~>3.8'
如果您使用Swift,請(qǐng)確保添加use_frameworks!并將目標(biāo)設(shè)置為iOS 8+:
platform :ios, '8.0'
use_frameworks!
10.1.2 子模塊(subspecs)
現(xiàn)在有4個(gè)可以的子模塊:Core,MapKit,GIF和WebP(這意味著你只能安裝部分SDWebImage模塊。默認(rèn)情況下,你只會(huì)得到Core,所以如果你需要WebP,你需要指定它)。
Podfile示例:
pod 'SDWebImage/WebP'
10.2 使用Carthage安裝(iOS 8+)
Carthage是Swift和Objective-C的輕量級(jí)依賴管理員。它利用CocoaTouch模塊,并且比CocoaPods的侵入性更小。
要安裝Carthage,請(qǐng)遵循Carthage的說明
Cartfile
github "rs/SDWebImage"
10.3 通過克隆倉(cāng)庫(kù)安裝
請(qǐng)參閱手動(dòng)安裝
10.4 導(dǎo)入源文件中的headers
在需要使用庫(kù)的源文件中,導(dǎo)入頭文件:
#import <SDWebImage/UIImageView+WebCache.h>
10.5 構(gòu)建工程
到這里,您的workspace應(yīng)該能沒有錯(cuò)誤地被構(gòu)建。如果您遇到問題,請(qǐng)發(fā)郵件到社區(qū)可以幫助您解決問題。
11. 作者
12. 合作方
13. 許可證
所有源代碼均獲得MIT許可證許可。
14. 架構(gòu)圖

