SDWebImage是一個功能很強大的緩存網絡圖片的框架。框架實現了異步加載網絡圖片、自動緩存圖片數據等功能。以UIImageView加載網絡圖片為例,對其總體的加載圖片流程做一個大致的分析。 首先使用SDWebImage先要導入 #import "UIImageView+WebCache.h"文件,設置網絡圖片的圖片地址就可以加載圖片。
NSURL *url = [NSURL URLWithString:@"http://b.hiphotos.baidu.com/imag1e03d003478ec54e736d196f9.jpg"];
[imageView setImageWithURL:url];
根據網絡圖片地址,SDWebImageManager類提供了方法downloadWithURL加載圖片
進入downloadWithURL方法,由SDImagerCache類提供方法queryDiskCacheForKey檢查內存中是否有圖片緩存,如果有圖片緩存,回調block將圖片數據傳遞給SDWebImageManger類。SDWebImageMange類回調block將圖片數據傳遞給UIImageView+WebCache類去顯示圖片。
如果內存中沒有圖片緩存,將會去磁盤中查找圖片緩存。這一步操作是異步操作,如果從磁盤中讀取到圖片數據,將圖片數據添加到內存緩存中,回調block將圖片數據傳遞給SDWebImageManger類。 SDWebImageMange類回調block將圖片數據傳遞給UIImageView+WebCache類去顯示圖片
內存和磁盤中都沒有圖片緩存,由SDWebImageDownloader類downloadImageWithURL方法請求網絡下載圖片。
圖片下載完成后,數據下載完成后交給 SDWebImageDecoder 做圖片解碼處理,圖片解碼完成后回調給SDWebImageDownloader類,SDWebImageDownloader類,回調block將圖片數據傳遞給SDWebImageManger類。 SDWebImageMange類回調block將圖片數據傳遞給UIImageView+WebCache類顯示圖片。
圖片數據會寫入到內存和磁盤緩存中。圖片數據寫入磁盤緩存中是異步操作,避免拖慢主線程。
總結:
1、SDWebImageManager *manager = [SDWebImageManager sharedManager];管理圖片的加載,由SDImagerCache類檢查內存中是否有圖片緩存,或者由SDWebImageDownloader類請求網絡下載圖片。
2、SDImageCache 類管理圖片緩存,讀取圖片緩存和寫入圖片緩存。
3、SDWebImageDownloader,根據URL向網絡讀取數據。