一、SDWebImage架構(gòu)
- SDWebImage架構(gòu)
- SDWebImageManager
- SDImageCache
- SDWebImageDownloader
- SDWebImageDownloaderOperation
** SDWebImage常見知識點(diǎn)**
-
默認(rèn)緩存時(shí)間多少
- 一周
緩存的地址
NSString *fullNamespace = [@"com.hackemist.SDWebImageCache." stringByAppendingString:ns];
-
cleanDisk如何清理過期圖片
- 刪除早于過期日期的文件
- 保存文件屬性以計(jì)算磁盤緩存占用空間
- 如果剩余磁盤緩存空間超出最大限額,再次執(zhí)行清理操作,刪除最早的文件
-
clearDisk如何清理磁盤
- 刪除緩存目錄
- 新建緩存目錄
-
SDWebImage如何播放圖片
- 取出gif中每一幀, 生成一張可動(dòng)畫圖片
-
SDWebImage如何判斷圖片類型
- 判斷圖片二進(jìn)制前8個(gè)字節(jié)
- kPNGSignatureBytes[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};
SDWebImage原理分析與常識
- SDWebImage會自動(dòng)進(jìn)行內(nèi)存緩存和磁盤緩存
- SDWebImage的磁盤緩存, 是按照時(shí)間來處理的, 只要緩存數(shù)據(jù)超過了最大的緩存時(shí)間, 就會自動(dòng)刪除
- SDWebImage默認(rèn)的磁盤緩存時(shí)間是多久?
+ 1周
- SDWebImage接收到內(nèi)存警告會如何處理
+ 只要接收到內(nèi)存警告就會調(diào)用 clearMemory 清空內(nèi)存緩存
- SDWebImage即將要被終結(jié)如何處理
+ 會調(diào)用 cleanDisk 方法, 刪除過期的文件
- SDWebImage存儲到什么為止
+ caches文件夾下面
+ 新建一個(gè)default文件夾用于緩存
- SDWebImage是如何清空緩存 ?
+ clearMemory
+ 移除NSCache中保存的所有圖片對象
- SDWebImage是如何清除磁盤
+ cleanDisk : 清除過期的
* 遍歷緩存目錄, 找到所有過期的文件, 并刪除
* 查看當(dāng)maxCacheSize的值, 如果刪除之后緩存的大小, 還大于maxCacheSize, 那么就會從時(shí)間較早的開始繼續(xù)刪除, 直到緩存大小小于maxCacheSize為止
+ clearDisk : 清除所有
* 直接干掉緩存文件夾
* 重新創(chuàng)建一個(gè)新的文件夾, 作為緩存文件
- SDWebImage可以直接播放GIF圖片
+ 加載GIF圖片, 然后取出GIF圖片中所有的幀, 并且計(jì)算動(dòng)畫時(shí)間
+ 根據(jù)取出的幀和動(dòng)畫時(shí)間生產(chǎn)一張新的可動(dòng)畫的圖片
- SDWebImage它可以判斷圖片的類型
+ 圖片的十六進(jìn)制數(shù)據(jù), 的前8個(gè)字節(jié)都是一樣的, 所以可以同判斷十六進(jìn)制來判斷圖片的類型
+ PNG
+ JPG
+ ...
二、 基本使用
- SDWebImage ->設(shè)置UIImageView圖片
- 1、導(dǎo)入頭文件 #import "UIImageView+WebCache.h"
- 2、sd_setImageWithURL:
[cell.imageView sd_setImageWithURL:
[NSURL URLWithString:app.icon]
placeholderImage:[UIImage imageNamed:@"abc"]];
- SDWebImage 直接下載一張圖片
/*
第1個(gè)參數(shù): 需要下載圖片的URL
第2個(gè)參數(shù): 下載的配置信息(例如是否需要緩存等等)
第3個(gè)參數(shù): 下載過程中的回調(diào)
第4個(gè)參數(shù): 下載完成后的回調(diào)
*/
NSURL *url = [NSURL URLWithString:@"http://ia.topit.me/a/f9/0a/1101078939e960af9ao.jpg"];
[[SDWebImageManager sharedManager] downloadImageWithURL:url options:kNilOptions progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// receivedSize : 已經(jīng)接受到的數(shù)據(jù)大小
// expectedSize : 需要下載的圖片的總大小
NSLog(@"正在下載 %zd %zd", receivedSize, expectedSize);
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
// image : 下載好的圖片
// error: 錯(cuò)誤信息
// cacheType: 緩存的類型
// finished: 是否下載完成
// imageURL: 被下載的圖片的地址
NSLog(@"下載成功 %@", image);
}];
- SDWebImage還有個(gè)按鈕分類,可以設(shè)置按鈕圖片