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