4.SDWebImage的應用(常用)

重要的3個類

 #import "SDWebImageManager.h"http://在內(nèi)存警告appdelegate.m里面使用
  
 #import "UIImageView+WebCache.h"在處理圖片的時候使用
 
 #import " SDImageCache.h "http://可以查看緩存的時間和最大的內(nèi)存緩存

1.簡述講解的內(nèi)容

<1>什么是SDWebImage?
<2>iOS中著名的牛逼的網(wǎng)絡圖片處理框架
<3>包含的功能:圖片的下載,圖片的緩存(什么緩存都有,還可以設定多久緩存的圖片清理),下載的進度監(jiān)聽(可以處理大圖片的下載進度),gif處理(動態(tài)圖的處理播放,用ImageIO抽出來gif里面的每一幀來處理gif圖片播放)等等
<4>用法極其簡單,功能十分強大,大大提高了圖片的處理效率
<5>國內(nèi)超過90%的iOS項目都有它的影子

一個項目的地址
題外話: SDWebImage也是繼承于imageIO 專門用于處理Gif圖片

2.使用它之前先導入

 導入#import "UIImageView+WebCache.h"

3.SDWebImage對各種方法的使用

1.圖片的下載展示以及無網(wǎng)路替換圖片
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
要的是圖片的連接和無網(wǎng)絡的情況下替換圖片
操作的對象是 UIImageView的對象,在沒有網(wǎng)絡的情況下圖片也會顯示出來,是應為SDWebImage它會把圖片緩存一周
2.進行圖片的下載和展示(操作對象都是UIImageView)

- (void)sd_setImageWithURL:(NSURL *)url;僅僅加載圖片的連接

3.完成圖片的展示和下載后再做其他的事情 completed(圖片加載完畢)

 [imageView sd_setImageWithURL:(NSURL *) placeholderImage:(UIImage *) completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
    
       在圖片**加載完畢**這里可以做一些其他的事情(有可能從沙盒里面獲取)
  }];

4.帶有下載的參數(shù),一般是前兩種參數(shù)混合使用

NSURL *url = [NSURL URLWithString:array[indexPath.row]];

UIImage *placeholder = [UIImage imageNamed:@"haha"];

//options 下載的一些參數(shù)

//SDWebImageOptions (前兩個混合使用價值比較高,其他的特殊情況下使用)
   /*
    1.SDWebImageRetryFailed  下載失敗再次下載
    2.SDWebImageLowPriority  在UI交互情況下停止下載,UIScrollView減速時延遲下載
    3.SDWebImageCacheMemoryOnly 緩存在內(nèi)存里面,下次進來就沒有了,一般不用
    4.SDWebImageProgressiveDownload 圖片從上往下刷出來
    5.SDWebImageRefreshCached 刷新緩存
   */

SDWebImageOptions options = SDWebImageRetryFailed | SDWebImageLowPriority;

[cell.picture sd_setImageWithURL:url placeholderImage:placeholder options:options progress:^(NSInteger receivedSize, NSInteger expectedSize) {
    
    //這里每下載一段就會被調(diào)用(可能會頻繁的調(diào)用):具體的根據(jù)圖片的大小來計算
    //receivedSize 接收到多少個字節(jié)
    //expectedSize 期望的字節(jié)(總的字節(jié))
    
    NSLog(@"下載進度==%f",1.0*receivedSize/expectedSize);//或者(double)*receivedSize/expectedSize
    
    
    //這里是圖片下載的進度
    
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
    
    //圖片加載完畢(可能是從沙盒里面加載,也可能從服務器加載):只調(diào)用一次
}];

第一次會走下載進度那里,之后不再走,直接從沙盒獲取,加載完成


在第一次下載會走瞎子進度那里

5.下面我們來講解一下有關圖片在沙盒里面內(nèi)存較大的情況的下的內(nèi)存報警的處理辦法,在appdelegate.m里面進行 處理

在appdelegate里面導入#import "SDWebImageManager.h"
/*
當我們的整個程序接收到內(nèi)存警告
*/

-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
SDWebImageManager *manger = [SDWebImageManager sharedManager];

//1.取消下載的操作

[manger cancelAll];

//2.清楚內(nèi)存的緩存,沙盒不用清,沙盒和內(nèi)存沒關系
/*
[manger.imageCache clearDisk];//清除沙盒,東西會全部沒有了,下次還要下載

[manger.imageCache cleanDisk];//清楚沙盒過期的緩存
 */

//在此我們只需要清楚內(nèi)存呢警告就好了

[manger.imageCache clearMemory];//清除內(nèi)存警告

 }

<1>圖片默認緩存的時間是 1個星期,以秒為單位

如:manger.imageCache.maxCacheAge = 100 * 60 *60;//緩存100天
默認一個星期

<2>緩存最多(最大的緩存量)可以裝多少東西,比如說我設置8M,超過之后會清理以前的東西來放新的東西,在此沒有默認緩存多大,單位是bytes字節(jié)


最大的緩存大小

簡單的運用 密碼: bj5j

最后:下面是我對cell上圖片的緩存

/**
 *  1.內(nèi)存緩存圖片
 */

@property(nonatomic,strong) NSMutableDictionary *dataDictionary;

NSString *stringImage = [NSString stringWithFormat:@"%@",self.plist[indexPath.row]];

//先從內(nèi)存緩存中取出圖片
UIImage *image = self.dataDictionary[stringImage];

if (image) {//內(nèi)存有圖片
    
     cell.imageCellPicture.image = image;
    
}else{// 內(nèi)存中沒有圖片

dispatch_async(dispatch_get_global_queue(0, 0), ^{
 
    //獲取Library/Caches 文件夾
    NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    //獲取文件名(也就是取得路徑的最后一個路徑)
    NSString *fileName = [stringImage lastPathComponent];
    //計算出全路徑
    NSString *filePath = [cachesPath stringByAppendingPathComponent:fileName];
    //取出圖片
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    
    if(data){//直接利用沙盒中圖片
        
        dispatch_async(dispatch_get_main_queue(), ^{
            
            cell.imageCellPicture.image = [UIImage imageWithData:data];
            
        });
         //存到字典中
        self.dataDictionary[stringImage] = cell.imageCellPicture.image;
        
    }else
    {   // 下載圖片
        data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringImage]];
        
        UIImage *image1 = [UIImage imageWithData:data];
        
        dispatch_async(dispatch_get_main_queue(), ^{
            
            cell.imageCellPicture.image = image1;
        });
        
        // 存到字典中
        self.dataDictionary[stringImage] = cell.imageCellPicture.image;
        // 將圖片文件數(shù)據(jù)寫入沙盒中
        [data writeToFile:filePath atomically:YES];
    }
});

圖片緩存代碼 密碼: wjhv

有沙盒的緩存

完善的圖片緩存 密碼: gr3k

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容