iOS開發SDWebImage的基本使用


#import "ViewController.h"
#import "UIImageView+WebCache.h"
#import "SDWebImageManager.h"
#import "SDWebImageDownloader.h"
#import "UIImage+GIF.h"
#import "NSData+ImageContentType.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self download];
}

//1.下載圖片且需要獲取下載進度
/**
 *    1:當需要獲取下載進度的時候可以使用此方法,其中optiobs如果什么都不做,可以傳參數0,optiobs是一個位移枚舉,可以通過按位或 | 來並列添加參數 2:SDImageCacheType緩存的類型:此方法默認做了內存緩存,與磁盤緩存,第一次是直接下載,然后點擊的時候是從內存緩存中讀取,當內存緩存不存在的時候,再從磁盤緩存讀取
 *
 */
//內存緩存&磁盤緩存
-(void)download
{
    [self.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://img4.duitang.com/uploads/blog/201310/18/20131018213446_smUw4.thumb.600_0.jpeg"] placeholderImage:[UIImage imageNamed:@"Snip20160221_306"] options:SDWebImageCacheMemoryOnly | SDWebImageProgressiveDownload progress:^(NSInteger receivedSize, NSInteger expectedSize) {
        
    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        
        switch (cacheType) {
            case SDImageCacheTypeNone:
                NSLog(@"直接下載");
                break;
            case SDImageCacheTypeDisk:
                NSLog(@"磁盤緩存");
                break;
            case SDImageCacheTypeMemory:
                NSLog(@"內存緩存");
                break;
            default:
                break;
        }
    }];
    
    NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]);
    
}

//2.只需要簡單獲得一張圖片,不設置


/**
 * 1:默認SDImageCacheType是內存緩存&磁盤緩存。如果只是簡單下載一張圖片,就用如下的方法:[SDWebImageManager sharedManager] downloadImageWithURL
 *
 */

-(void)download2
{
    [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:@"http://img4.duitang.com/uploads/blog/201310/18/20131018213446_smUw4.thumb.600_0.jpeg"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
        NSLog(@"%f",1.0 * receivedSize / expectedSize);
        
    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
        
        //得到圖片
        self.imageView.image = image;
    }];
}




//3.不需要任何的緩存處理
/**
 * 沒有做任何緩存處理
 *
 */

-(void)download3
{
    //data:圖片的二進制數據
    [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:@"http://img4.duitang.com/uploads/blog/201310/18/20131018213446_smUw4.thumb.600_0.jpeg"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
        
    } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
        
        [[NSOperationQueue mainQueue]addOperationWithBlock:^{
             self.imageView.image = image;
        }];
       
    }];
}




//4.播放Gif圖片
/**
 *播放Gif圖片
 */
-(void)gif
{
    NSLog(@"%s",__func__);
    //self.imageView.image = [UIImage imageNamed:@"39e805d5ad6eddc4f80259d23bdbb6fd536633ca"];
    
    UIImage *image = [UIImage sd_animatedGIFNamed:@"39e805d5ad6eddc4f80259d23bdbb6fd536633ca"];
    self.imageView.image = image;
}

-(void)type
{
    NSData *imageData = [NSData dataWithContentsOfFile:@"/Users/xiaomage/Desktop/Snip20160221_306.png"];
    NSString *typeStr = [NSData sd_contentTypeForImageData:imageData];
    NSLog(@"%@",typeStr);
}
@end
二:當內存產生警告的時候,清除緩存
#import "AppDelegate.h"
#import "SDWebImageManager.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    //1.清空緩存
    //clear:直接刪除緩存目錄下面的文件,然后重新創建空的緩存文件
    //clean:清除過期緩存,計算當前緩存的大小,和設置的最大緩存數量比較,如果超出那么會繼續刪除(按照文件了創建的先后順序)
    //過期時間:7天
    [[SDWebImageManager sharedManager].imageCache clearMemory];
    
    //2.取消當前所有的操作
    [[SDWebImageManager sharedManager] cancelAll];
    
    //3.最大並發數量 == 6
    //4.緩存文件的保存名稱如何處理? 拿到圖片的URL路徑,對該路徑進行MD5加密
    //5.該框架內部對內存警告的處理方式? 內部通過監聽通知的方式請你緩存
    //6.該框架進行緩存處理的方式:可變字典--->NSCache
    //7.如何判斷圖片的類型: 在判斷圖片類型的時候,只匹配第一個字節
    //8.隊列中任務的處理方式:FIFO
    //9.如何下載圖片的? 發送網絡請求下載圖片,NSURLConnection
    //10.請求超時的時間 15秒
    
    //[NSData dataWithContentsOfURL:<#(nonnull NSURL *)#>]
}
@end

三:SDWebImage的結構:最頂層的父類是SDWebImageManager,其下有兩個子類如圖所示

 

 








四:知識點總結:


01 設置imageView的圖片 [cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed:@"placehoder"]]; 02 設置圖片並計算下載進度 //下載並設置圖片 /* 第一個參數:要下載圖片的url地址 第二個參數:設置該imageView的占位圖片 第三個參數:傳一個枚舉值,告訴程序你下載圖片的策略是什么 第一個block塊:獲取當前圖片數據的下載進度 receivedSize:已經下載完成的數據大小 expectedSize:該文件的數據總大小 第二個block塊:當圖片下載完成之后執行該block中的代碼 image:下載得到的圖片數據 error:下載出現的錯誤信息 SDImageCacheType:圖片的緩存策略(不緩存,內存緩存,沙盒緩存) imageURL:下載的圖片的url地址 */ [cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed:@"placehoder"] options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) { //計算當前圖片的下載進度 NSLog(@"%.2f",1.0 *receivedSize / expectedSize); } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { }]; 03 系統級內存警告如何處理(面試) //取消當前正在進行的所有下載操作 [[SDWebImageManager sharedManager] cancelAll]; //清除緩存數據(面試) //cleanDisk:刪除過期的文件數據,計算當前未過期的已經下載的文件數據的大小,如果發現該數據大小大於我們設置的最大緩存數據大小,那么程序內部會按照按文件數據緩存的時間從遠到近刪除,知道小於最大緩存數據為止。 //clearMemory:直接刪除文件,重新創建新的文件夾 //[[SDWebImageManager sharedManager].imageCache cleanDisk]; [[SDWebImageManager sharedManager].imageCache clearMemory]; 04 SDWebImage默認的緩存時間是1周 05 如何播放gif圖片 /* 5-1 把用戶傳入的gif圖片->NSData 5-2 根據該Data創建一個圖片數據源(NSData->CFImageSourceRef) 5-3 計算該數據源中一共有多少幀,把每一幀數據取出來放到圖片數組中 5-4 根據得到的數組+計算的動畫時間-》可動畫的image [UIImage animatedImageWithImages:images duration:duration]; */ 06 如何判斷當前圖片類型,只判斷圖片二進制數據的第一個字節 + (NSString *)sd_contentTypeForImageData:(NSData *)data; 07 內部如何進行緩存處理?使用了NSCache類,使用和NSDictionary類似 08 沙盒緩存圖片的命名方式為對該圖片的URL進行MD5加密 echo -n "url" |MD5 09 當接收到內存警告之后,內部會自動清理內存緩存 10 圖片的下載順序,默認是先進先出的:FIFO原則


免責聲明!

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



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