#import "UIImageView+WebCache.h"01 设置imageView的图片 (要引入头文件:
)
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed:@"placehoder"]];

1 //1.下载图片且需要获取下载进度 2 //内存缓存&磁盘缓存 3 -(void)download 4 { 5 [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) { 6 7 } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 8 9 switch (cacheType) { 10 case SDImageCacheTypeNone: 11 NSLog(@"直接下载"); 12 break; 13 case SDImageCacheTypeDisk: 14 NSLog(@"磁盘缓存"); 15 break; 16 case SDImageCacheTypeMemory: 17 NSLog(@"内存缓存"); 18 break; 19 default: 20 break; 21 } 22 }]; 23 24 NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]); 25 26 }
设置图片并计算下载进度
//下载并设置图片
/*
第一个参数:要下载图片的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)
{
}];
02.只需要简单获得一张图片,不设置(要引入头文件:
#import "SDWebImageManager.h")

1 //2.只需要简单获得一张图片,不设置 2 //内存缓存&磁盘缓存 3 -(void)download2 4 { 5 [[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) { 6 NSLog(@"%f",1.0 * receivedSize / expectedSize); 7 8 } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { 9 10 //得到图片 11 self.imageView.image = image; 12 }]; 13 }
03.不需要任何的缓存处理(要引入头文件:
#import "SDWebImageDownloader.h")

1 //3.不需要任何的缓存处理 2 //没有做任何缓存处理| 3 -(void)download3 4 { 5 //data:图片的二进制数据 6 [[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) { 7 8 } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { 9 //注意:此处作者没有做线程间的通信,所以我们要手动把设置图片的操作放到主线程里 10 [[NSOperationQueue mainQueue]addOperationWithBlock:^{ 11 self.imageView.image = image; 12 }]; 13 14 }]; 15 }
04.设置gif图片(要引入头文件:
#import "UIImage+GIF.h")
内部实现:
4-1 把用户传入的gif图片->NSData
4-2 根据该Data创建一个图片数据源(NSData->CFImageSourceRef)
4-3 计算该数据源中一共有多少帧,把每一帧数据取出来放到图片数组中
4-4 根据得到的数组+计算的动画时间-》可动画的image

1 //4.播放Gif图片 2 -(void)gif 3 { 4 NSLog(@"%s",__func__); 5 //self.imageView.image = [UIImage imageNamed:@"39e805d5ad6eddc4f80259d23bdbb6fd536633ca"]; 6 7 UIImage *image = [UIImage sd_animatedGIFNamed:@"39e805d5ad6eddc4f80259d23bdbb6fd536633ca"]; 8 self.imageView.image = image; 9 }
05 系统级内存警告如何处理(面试)
//取消当前正在进行的所有下载操作
[[SDWebImageManager sharedManager] cancelAll];
//清除缓存数据(面试)
// 缓存周期:7天
// clearDisk:删除文件夹,重新创建
//cleanDisk:删除过期的文件数据,计算当前未过期的已经下载的文件数据的大小,如果发现该数据大小大于我们设置的最大缓存数据大小,那么程序内部会按照按文件数据缓存的时间从远到近删除,知道小于最大缓存数据为止。
//clearMemory:直接删除文件,重新创建新的文件夹
//[[SDWebImageManager sharedManager].imageCache cleanDisk];
[[SDWebImageManager sharedManager].imageCache clearMemory];

1 -(void)applicationDidReceiveMemoryWarning:(UIApplication *)application 2 { 3 //1.清空缓存 4 //clear:直接删除缓存目录下面的文件,然后重新创建空的缓存文件 5 //clean:清除过期缓存,计算当前缓存的大小,和设置的最大缓存数量比较,如果超出那么会继续删除(按照文件了创建的先后顺序) 6 //过期时间:7天 7 [[SDWebImageManager sharedManager].imageCache clearMemory]; 8 9 //2.取消当前所有的操作 10 [[SDWebImageManager sharedManager] cancelAll]; 11 12 //3.最大并发数量 == 6 13 //4.缓存文件的保存名称如何处理? 拿到图片的URL路径,对该路径进行MD5加密 14 //5.该框架内部对内存警告的处理方式? 内部通过监听通知的方式请你缓存 15 //6.该框架进行缓存处理的方式:可变字典--->NSCache 16 //7.如何判断图片的类型: 在判断图片类型的时候,只匹配第一个字节 17 //8.队列中任务的处理方式:FIFO 18 //9.如何下载图片的? 发送网络请求下载图片,NSURLConnection 19 //10.请求超时的时间 15秒 20 21 //[NSData dataWithContentsOfURL:<#(nonnull NSURL *)#>] 22 }
06 SDWebImage默认的缓存时间是1周
07 如何判断当前图片类型
NSData+ImageContentType.h(要引入头文件:
#import "")
+ (NSString *)sd_contentTypeForImageData:(NSData *)data;