iOS之SDWebImage下載緩存圖片實現原理


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類去顯示圖片

內存和磁盤中都沒有圖片緩存,由SDWebImageDownloaderdownloadImageWithURL方法請求網絡下載圖片。

圖片下載完成后,數據下載完成后交給 SDWebImageDecoder 做圖片解碼處理,圖片解碼完成后回調給SDWebImageDownloader類,SDWebImageDownloader類,回調block將圖片數據傳遞給SDWebImageManger類。 SDWebImageMange類回調block將圖片數據傳遞給UIImageView+WebCache類顯示圖片。

圖片數據會寫入到內存和磁盤緩存中。圖片數據寫入磁盤緩存中是異步操作,避免拖慢主線程。

 

總結:

1、SDWebImageManager *manager = [SDWebImageManager sharedManager];管理圖片的加載,由SDImagerCache類檢查內存中是否有圖片緩存,或者由SDWebImageDownloader類請求網絡下載圖片。

2SDImageCache 類管理圖片緩存,讀取圖片緩存和寫入圖片緩存。

3、SDWebImageDownloader,根據URL向網絡讀取數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM