SDWebImage異步加載圖片及緩存的管理與清理

轉自Hank_hust
轉自北上龍之git

1、SDWebImage介紹
 一、在項目的開發過程當中,咱們常常會用到異步加載圖片的功能,先從網絡上異步下載圖片,而後經過UIImageView顯示在屏幕上。這是一個常常使用的功能,基本上全部的聯網應用程序都要用到的功能,如今GitHub上已經有很是成熟的框架。github

SDWebImage(提供異步加載圖片、緩存管理,下載進度等,功能最齊全) 
EGOImageLoading(以前使用的框架,緩存管理不如SDWebImage設計簡單) 
AFNetworking (只提供異步加載圖片功能,無緩存管理) 
這裏主要介紹SDWebImage,這個框架用的最多,在GitHub上已經給出框架的一些使用方法(詳情https://github.com/rs/SDWebImage),咱們直接下載這個框架,運行裏面的Demo發現Xcode會報編譯錯誤,這是由於SDWebImage在項目中引用了GitHub的另一個項目libwebp的項目,若是要運行Demo網上已經給出瞭解決辦法。web

二、咱們只是使用異步加載圖片及緩存管理的相關功能,不須要libwebp項目,新建項目,將SDWebImage目錄下的源代碼直接加到項目中緩存

2、使用SDWebImage提供的類擴展實現異步加載圖片 一、SDWebImage提供了UIImageView的擴展類,只須要在頭文件中加入文件引用服務器

#import "UIImageView+WebCache.h

異步加載圖片方法:網絡

- (void)setImageWithURL:(NSURL *)url placeholderImage:( UIImage *)placeholder; 

url 圖片的地址 placeholder 網絡圖片在還沒有加載成功時顯示的圖像 默認狀況下,SDWebImage會忽略Header中的緩存設置,將圖片以url爲key進行保存,url與圖片是一一對應關係。因此請求同一個url時,SDWebImage會從緩存中取得圖片。通常的狀況下用此方法能夠知足咱們的應用要求,可是若是你請求同一個url,而這張圖片在服務器端更新了,本地客戶端再次請求時仍是會返回緩存中的舊圖片,例如加載頭像類常常更新的圖片時,就會出現頭像不能更新的問題,因爲url與圖片一一對應,一種解決的辦法是改變部分url地址方式實現更新,不過這種方法操做起來很複雜,下面介紹一個更方便的辦法框架

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;

咱們將第三個參數設置爲SDWebImageRefreshCached就能夠實現圖片更新操做了,使用方法很簡單,以下:異步

NSURL *url = [NSURL URLWithString:@"http://www.example.com/image.png"];                     
UIImage *defaultImage = [UIImage imageNamed:@"default.png"];            
[self.imageView setImageWithURL:url placeholderImage:defaultImage options:SDWebImageRefreshCached];

3、緩存的計算及清理 一、緩存計算,這裏的緩存計算,只計算SDWebImage的緩存,沙盒文件夾中的其它文件並不包括在內:url

[SDWebImageManager.sharedManager.imageCache 
calculateSizeWithCompletionBlock:^(NSUInteger fileCount, NSUInteger totalSize) {
 }];

二、緩存清理
在SDWebImage中有兩種緩存,一種是磁盤緩存,一種爲內存緩存,框架都提供了相應的方法:.net

[[[SDWebImageManager sharedManager] imageCache] clearDisk];     
[[[SDWebImageManager sharedManager] imageCache] clearMemory];

不過這裏要特別注意一下,在IOS7中你會發現使用這兩個方法緩存總清除不乾淨,即便斷網下仍是會有數據。這是由於在IOS7中,緩存機制作了修改,使用上述兩個方法只清除了SDWebImage的緩存,沒有清除系統的緩存,因此咱們能夠在清除緩存的代理中額外添加如下:

[[NSURLCache sharedURLCache] removeAllCachedResponses];
相關文章
相關標籤/搜索