-
內(nèi)部結(jié)構(gòu)
- SDWebImageManager
- SDWebImageCache
- SDWebImageDownloader
- SDWebImageManagerDownloadOperation
- SDWebImageManager
-
框架的使用
- UIImageView+WebCache分類
-
簡(jiǎn)單下載圖片
/* 第一個(gè)參數(shù):圖片的url 第二個(gè)參數(shù):占位圖片 緩存處理:內(nèi)存緩存+磁盤緩存 - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder */
-
得到圖片的下載進(jìn)度
/* 第一個(gè)參數(shù):圖片的url 第二個(gè)參數(shù):占位圖片 第三個(gè)參數(shù):下載圖片的選項(xiàng)(策略) 第四個(gè)參數(shù):progress進(jìn)度回調(diào) eceivedSize:已經(jīng)下載的圖片大小 expectedSize:圖片的總大小 第五個(gè)參數(shù):completed 下載完成(成功|失敗)之后的回調(diào) image:要下載的圖片,如果錯(cuò)誤的話,那么image = nil error:錯(cuò)誤信息,如果錯(cuò)誤的話 那么這個(gè)error有值 cacheType:緩存的類型 SDImageCacheTypeNone:沒有使用緩存,圖片是直接下載的 SDImageCacheTypeDisk:磁盤緩存 SDImageCacheTypeMemory:內(nèi)存緩存 imageURL:圖片的url 緩存處理:內(nèi)存緩存+磁盤緩存 - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock */
-
- SDWebImageManager類
- 只是想簡(jiǎn)單的得到一張圖片
/* 第一個(gè)參數(shù):圖片的url 第二個(gè)參數(shù):下載圖片的選項(xiàng)(策略) 第三個(gè)參數(shù):progress進(jìn)度回調(diào) receivedSize:已經(jīng)下載的圖片大小 expectedSize:圖片的總大小 第四個(gè)參數(shù):completed 下載完成(成功|失敗)之后的回調(diào) image:要下載的圖片,如果錯(cuò)誤的話,那么image = nil error:錯(cuò)誤信息,如果錯(cuò)誤的話 那么這個(gè)error有值 cacheType:緩存的類型 SDImageCacheTypeNone:沒有使用緩存,圖片是直接下載的 SDImageCacheTypeDisk:磁盤緩存 SDImageCacheTypeMemory:內(nèi)存緩存 imageURL:圖片的url 緩存處理:內(nèi)存緩存+磁盤緩存 -(id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionWithFinishedBlock)completedBlock */
- UIImage+GIF分類
- 播放本地的gif
// 使用UIImage的類方法 +(UIImage *)sd_animatedGIFNamed:(NSString *)name /* 內(nèi)部原理: 1>把用戶傳入的gif圖片轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)流NSData 2>調(diào)用系統(tǒng)<ImageIO/ImageIO.h>的+(UIImage *)sd_animatedGIFWithData:(NSData *)data方法 2.1>系統(tǒng)方法根據(jù)NSData創(chuàng)建一個(gè)圖片數(shù)據(jù)源 2.2>計(jì)算數(shù)據(jù)源中一共有多少幀,把每一幀數(shù)據(jù)取出放到圖片數(shù)組中 2.3>根據(jù)得到的數(shù)組和計(jì)算好的動(dòng)畫時(shí)間得到動(dòng)畫,核心代碼:animatedImage = [UIImage animatedImageWithImages:images duration:duration]; */
- SDWebImageDownloader類和UIImage+GIF分類
- 下載一張gif
// 1. 創(chuàng)建SDWebImageDownloader的單例對(duì)象 +(SDWebImageDownloader *)sharedDownloader // 2. SDWebImageDownloader單例對(duì)象調(diào)用下面方法下載gif /* 第一個(gè)參數(shù):圖片的url 第二個(gè)參數(shù):下載圖片的選項(xiàng)(策略) 第三個(gè)參數(shù):progress進(jìn)度回調(diào) receivedSize:已經(jīng)下載的圖片大小 expectedSize:圖片的總大小 第四個(gè)參數(shù):completed 下載完成(成功|失敗)之后的回調(diào) image:要下載的圖片,如果錯(cuò)誤的話,那么image = nil error:錯(cuò)誤信息,如果錯(cuò)誤的話 那么這個(gè)error有值 cacheType:緩存的類型 SDImageCacheTypeNone:沒有使用緩存,圖片是直接下載的 SDImageCacheTypeDisk:磁盤緩存 SDImageCacheTypeMemory:內(nèi)存緩存 imageURL:圖片的url 緩存處理:不做緩存處理 注意點(diǎn):completed回調(diào)是在子線程處理的,所以必須進(jìn)行線程間的通信返回到主線程 -(id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock */ // 3. 在completed中調(diào)用下面方法顯示gif圖片 +(UIImage *)sd_animatedGIFWithData:(NSData *)data
- 處理接收到的系統(tǒng)的內(nèi)存警告(面試)
- 采用監(jiān)聽系統(tǒng)警告通知的方式處理,接收到警告后清空緩存
- 代碼實(shí)現(xiàn)
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application { //1.清空緩存 [[SDWebImageManager sharedManager].imageCache clearDisk]; [[SDWebImageManager sharedManager].imageCache cleanDisk]; //2.取消當(dāng)前的下載操作 [[SDWebImageManager sharedManager] cancelAll];}
- clean和clear的區(qū)別(面試)
- clean:刪除過(guò)期緩存(蘋果官方規(guī)定最長(zhǎng)的緩存周期是1周),計(jì)算當(dāng)前緩存文件的總大小,比較設(shè)置的最大緩存,如果超出的話,那么就繼續(xù)刪除(按照緩存文件創(chuàng)建的順序),直到小于最大緩存為止
- clear:簡(jiǎn)單粗暴 ,直接刪除然后重新創(chuàng)建
- 使用注意事項(xiàng)
- 判斷圖片類型
+ (NSString *)sd_contentTypeForImageData:(NSData *)data
- 只判斷圖片二進(jìn)制數(shù)據(jù)的第一個(gè)字節(jié)
- 隊(duì)列里面任務(wù)的執(zhí)行方式:先進(jìn)先出
- 隊(duì)列最大并發(fā)數(shù)是6
- 圖片下載操作使用了NSURLConnection類發(fā)送網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)
- 下載圖片的請(qǐng)求超時(shí)時(shí)間:15s
- 緩存文件的命名的方式:使用URL字符串進(jìn)行MD5加密
- 接受到內(nèi)存警告之后,內(nèi)部的處理方式:監(jiān)聽通知,刪除內(nèi)存緩存
- 內(nèi)存緩存的處理方式:NSCache
- 判斷圖片類型
- UIImageView+WebCache分類
-
NSCache
- NSCache是專門用來(lái)進(jìn)行緩存處理的,
- NSCache簡(jiǎn)單介紹:
- NSCache是蘋果官方提供的緩存類,具體使用和NSMutableDictionary類似,在AFN和SDWebImage框架中被使用來(lái)管理緩存
- 蘋果官方解釋NSCache在系統(tǒng)內(nèi)存很低時(shí),會(huì)自動(dòng)釋放對(duì)象(但模擬器演示不會(huì)釋放)
建議:接收到內(nèi)存警告時(shí)主動(dòng)調(diào)用removeAllObject方法釋放對(duì)象 - NSCache是線程安全的,在多線程操作中,不需要對(duì)NSCache加鎖
- NSCache的Key只是對(duì)對(duì)象進(jìn)行Strong引用,不是拷貝
- 屬性介紹:
-
name
:名稱 -
delegete
:設(shè)置代理 -
totalCostLimit
:緩存空間的最大總成本,超出上限會(huì)自動(dòng)回收對(duì)象。默認(rèn)值為0,表示沒有限制 -
countLimit
:能夠緩存的對(duì)象的最大數(shù)量。默認(rèn)值為0,表示沒有限制 -
evictsObjectsWithDiscardedContent
:標(biāo)識(shí)緩存是否回收廢棄的內(nèi)容
-
- 方法介紹
-
-(void)setObject:(ObjectType)obj forKey:(KeyType)key;
//在緩存中設(shè)置指定鍵名對(duì)應(yīng)的值,0成本 -
-(void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;
//在緩存中設(shè)置指定鍵名對(duì)應(yīng)的值,并且指定該鍵值對(duì)的成本,用于計(jì)算記錄在緩存中的所有對(duì)象的總成本,出現(xiàn)內(nèi)存警告或者超出緩存總成本上限的時(shí)候,緩存會(huì)開啟一個(gè)回收過(guò)程,刪除部分元素 -
-(void)removeObjectForKey:(KeyType)key;
//刪除緩存中指定鍵名的對(duì)象 -
-(void)removeAllObjects;
//刪除緩存中所有的對(duì)象
-
-
位移枚舉
- 實(shí)現(xiàn)一個(gè)參數(shù)來(lái)傳遞多個(gè)參數(shù)
- 如果發(fā)現(xiàn)是位移枚舉,而且第一個(gè)選項(xiàng)不是0,那么你可以默認(rèn)傳0,效率是最高的
- 定義位移枚舉
typedef NS_OPTIONS(NSInteger, ZQActionType){ ZQActionTypeTop = 1<<0, ZQActionTypeBottom = 1<<1, ZQActionTypeLeft = 1<<2, ZQActionTypeRight = 1<<3,};
- 位移枚舉的應(yīng)用
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self demo:ZQActionTypeTop|ZQActionTypeBottom|ZQActionTypeLeft|ZQActionTypeRight];} -(void)demo:(ZQActionType)type { NSLog(@"%zd",type); if(type & ZQActionTypeTop) { NSLog(@"向上--%zd",type & ZQActionTypeTop); } if(type & ZQActionTypeBottom) { NSLog(@"向下--%zd",type & ZQActionTypeBottom); } if(type & ZQActionTypeLeft) { NSLog(@"向左--%zd",ZQActionTypeLeft); } if(type & ZQActionTypeRight) { NSLog(@"向右---%zd",ZQActionTypeRight); } }
SDWebImage框架學(xué)習(xí)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
推薦閱讀更多精彩內(nèi)容
- SDWebImage 圖片下載緩存框架 常用方法及原理 常見面試題: SDWebImage的最大并發(fā)數(shù)是多少? _...
- 技術(shù)無(wú)極限,從菜鳥開始,從源碼開始。 由于公司目前項(xiàng)目還是用OC寫的項(xiàng)目,沒有升級(jí)swift 所以暫時(shí)SDWebI...
- 下載 下載管理器 SDWebImageDownLoader作為一個(gè)單例來(lái)管理圖片的下載操作。圖片的下載是放在一個(gè)N...
- 圖片下載的這些回調(diào)信息存儲(chǔ)在SDWebImageDownloader類的URLOperations屬性中,該屬性是...
- 功能:圖片下載、圖片緩存、下載進(jìn)度監(jiān)聽、gif處理等等項(xiàng)目地址:https://github.com/rs/SDW...