SDWebImage的常用方法
2016-06-14 本文已影响213人
面糊
SDWebImage的常用方法
-
下载图片并显示
-
同时做内存缓存和磁盘缓存
-
图片加载结束之后, 在本地磁盘缓存会对图片名称进行一次MD5加密
-
再图片加载完成之前, 可以使用
placeholder
来作为占位图片: 目前APP通用的方法 -
弊端: 如果加载过多的图片, 会占用过多的内存, 因此要监听当前内存, 当内存占用过多主动释放
[self.imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"baiduIcon.png""]];
-
-
下载图片并计算下载进度
-
使用UIImageView的分类下载, 下载后会自动设置给UIIMageView
-
同时做内存缓存和磁盘缓存
-
添加了进度回调和完成回调
- 进度回调中可以监听到当前的下载进度, 可用于做一些指示性操作
- 完成回调可以在图片下载完毕之后, 执行一些操作
-
options: 这个参数可以设置下载图片的策略(对优化程序很重要), 在下面详细介绍
[self.imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"baiduIcon.png"] options:SDWebImageProgressiveDownload progress:^(NSInteger receivedSize, NSInteger expectedSize) { // receivedSize: 已经下载的数据的大小 // expectedSize: 图片的总大小 NSLog(@"%f",1.0 * receivedSize/expectedSize); } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { // 下载完成后会自动回到主线程 NSLog(@"%@",[NSThread currentThread]); switch (cacheType) { case SDImageCacheTypeNone: NSLog(@"直接下载, 不做缓存"); break; case SDImageCacheTypeDisk: NSLog(@"磁盘缓存"); break; case SDImageCacheTypeMemory: NSLog(@"内存缓存"); break; default: break; } }];
}
-
-
使用SDWebImageManager单例下载
-
同时做内存缓存和图片缓存
-
可以监听下载进度
-
下载图片后需要在Block回调中自行设置图片
[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:@"http://www.baidubg.jpg"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { NSLog(@"%f", 1.0 * receivedSize / expectedSize); } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { // 设置图片 NSLog(@"%@", [NSThread currentThread]); self.imageView.image = image; NSLog(@"%@", [NSThread currentThread]); }];
-
-
使用SDWebImageDownloader类来下载
-
downloader类, 只负责下载图片, 并不会去做任何的缓存
-
注意这里的Block回调, 是在子线程中进行的
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:@"http://www.baidubg.jpg"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { NSLog(@"%f", 1.0 * receivedSize / expectedSize); } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { // 回到主线程中设置图片 dispatch_async(dispatch_get_main_queue(), ^{ self.imageView.image = image; }); }];
-
-
加载GIF图片的方法
-
该方法专用于加载GIF图片, 并且也会做缓存
-
此方法为UIImage的分类
-
注意他会对过大的图片进行一次压缩处理
-
平时使用
sd_setImgae..
方法也可以加载GIF图片self.imageView.image = [UIImage sd_animatedGIFNamed:@"test"];
-
补充options的参数:
- SDWebImageRetryFiled(失败重试)
- SDWebImage在默认情况下, 如果某个URL失效无法下载, 那么SDWebImage就会将这个URL加入到一个黑名单中, 并且不会再次尝试去下载
- SDWebImageLowPriority(低优先级)
- 在默认情况下, 下载任务和UI交互之间, 是同时进行的; 如果选择这个设置, 那么系统会优先进行UI交互, 之后再去下载图片
- SDWebImageCacheMemoryOnly(内存缓存)
- 对于下载的图片, 只做内存缓存, 不做磁盘缓存(适用于一次展示类的图片)
- SDWebImageProgressiveDownload(渐进式下载)
- 默认情况下, 图片只有全部下载完成之后才可以显示; 这个设置可以让图片渐变式显示, 可以设置一些逐层刷新的效果
- SDWebImageRefreshCached(重新缓存)
- 此选项一般很少用, 算是一个诡异但是比较高级的用法, 笔者从来没用过.....
- 该方法即使你的图片已经缓存到磁盘了, 但是还是会重新缓存图片, 主要用做对同一个URL资源, 加载的可能是不同的图片, 就需要使用此方法
- SDWebImageContinueInBackground(后台加载)
- 当你的App退出到后台时, 对于没有下载完成的下载任务, 会向系统额外请求一点时间继续下载图片, 但是如果系统分配的时间已到, 下载就会被取消.
- 同上, 没用过, 因为我们应该尽量避免当App进入后台也要耗费流量的情况
- SDWebImageHandleCookies(Cookies缓存)
- 这个完全不知道怎么用, 应该是浏览器App使用的选项吧
- SDWebImageAllowInvalidSSLCertificates(允许未信任的证书)
- 可以在未被信任的证书网站中下载, 一般用于测试
- SDWebImageHighPriority(高优先级)
- 确保图片在第一时间被加载, 移动到队列最前方
- 对于个别需要尽快展示给用户的图片, 使用此方法
- SDWebImageDelayPlaceholder(推迟占位图片)
- 默认情况下, 会先显示出占位图片, 然后再去加载图片
- 此设置会先去加载图片, 加载完毕后再显示占位图片(诡异的用法)
- SDWebImageTransformAnimatedImage(未使用过)
- 没用过这个设置, 并且SDWebImage也不推荐使用
- SDWebImageAvoidAutoSetImage(手动管理缓存)
- 该设置会在加载图片完毕后, 在completion回调方法中, 由开发者自行处理图片缓存