SDWebImage是iOS中一款处理图片的框架, 使用它提供的方法, 一句话就能让UIImageView自动去加载并显示网络图片。特别是在UITableViewCell中有UIImageView需要显示来自网络的图片。SDWebImage会自动去管理这些图片, 包括缓存到内存和缓存到磁盘等等。包括gif图片的显示也是轻松完成。本文主要分享除了基本方法以外的一些其他给力方法。

图片下载

图片下载有两种方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
// 方法1:
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:url options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// 下载进度block
} completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
// 下载完成block
}]; // 方法2:
[[SDWebImageManager sharedManager] downloadImageWithURL:url options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// 下载进度block
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
// 下载完成block
}];

以上两个方法可以下载图片,但是肯定是有差别的。相同点就不详细说了,都提供下载进度回调和下载完成回调,主要说说不同点。

  • 方法1和方法2是两个不同的类,方法1(SDWebImageDownloader)只下载图片,不管理图片,不会缓存图片到内存和本地。方法2(SDWebImageManager) 既下载图片,又管理图片。其实方法2内部也是调用的方法1。只不过方法2会缓存图片,并且管理下载队列。
  • 下载完成之后的回调传递的参数不一样,方法1会将图片的NSData数据和传过来,而方法2只传递了image对象。
  • 方法1的completed回调不是在主线程,如果需要在主线程做事情,得手动回到主线程。方法2的completed回调是主线程,在做进一步处理时就不用再手动回到主线程了。

图片存储(SDImageCache类)

可以将手动将图片通过SDWebImage存储,由SDWebImage统一管理。

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 方法1
* @param key 图片的url路径
* @param toDisk 是否要缓存到磁盘
*/
- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk; /**
* 方法2
* @param recalculate 是否需要将image转换为data
* @param imageData 图片的NSData对象
*/
- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk;

以上是两个比较有代表性的方法

  • 方法1只能存储png或者jpg图片,不能存储gif图片,方法内部会对image对象进行转换,然后写到本地。
  • 方法2就比较给力了,因为提供了imageData参数,可以将图片的NSData对象传过去,什么类型的图片都可以存储。这里需要注意的是,如果提供了imageData, 那么recalculate传递NO就可以了, 方法内部就不会再拿UIImage对象去转换成NSData对象了了。

获取缓存图片的路径

有时候可能需要拿到缓存图片的路径做做一些事情,SDWebImage也提供了相应的方法。

1
2
// url是图片的网络路径
NSString *imageCachePath = [[SDImageCache sharedImageCache] defaultCachePathForKey:url];

获取缓存图片

1
2
// url是图片的网络路径
UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:src];

调用这个方法时,SDImageCache会先到内存中查找图片,如果没找到,再到磁盘上找。

获取缓存占用空间

1
[[SDImageCache sharedImageCache] getSize];

这个方法会直接返回通过SDWebImage缓存的图片,在磁盘上占用的空间。

其他给力方法

1
2
3
4
5
6
7
8
9
@interface UIImage (MultiFormat)
// 这个方法牛逼的地方在于,能加载gif图片。会根据data的类型采用不同的加载方法
+ (UIImage *)sd_imageWithData:(NSData *)data;
@end @interface NSData (ImageContentType)
// 根据data拿到图片的后缀,形如@"image/jpeg",@"image/png",@"image/gif"
+ (NSString *)sd_contentTypeForImageData:(NSData *)data;
@end

Done!

SDWebImage 常用方法的更多相关文章

  1. iOS-多线程--(pthread/NSThread/GCD/NSOperation)--总结

    零.线程的注意点(掌握) .不要同时开太多的线程(~3条线程即可,不要超过5条) .线程概念 > 主线程 : UI线程,显示.刷新UI界面,处理UI控件的事件 > 子线程 : 后台线程,异 ...

  2. (20160602)开源第三方学习之SDWebImage

    这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. 地址:https://github.com/rs/SDWebIm ...

  3. 第三方框架、AFN、ASI、SDWebImage

    AFN 一.2大管理对象1.AFHTTPRequestOperationManager* 对NSURLConnection的封装 2.AFHTTPSessionManager* 对NSURLSessi ...

  4. iOS 第三方框架-SDWebImage

    iOS中著名的牛逼的网络图片处理框架.包含的功能:图片下载.图片缓存.下载进度监听.gif处理等等.用法极其简单,功能十分强大,大大提高了网络图片的处理效率.国内超过90%的iOS项目都有它的影子. ...

  5. ios开发总结:Utils常用方法等收集,添加扩展类,工具类方法,拥有很多方便快捷功能(不断更新中。。。)

    BOBUtils 工具大全 本人github开源和收集功能地址:https://github.com/niexiaobo [对ios新手或者工作一年以内开发人员很有用处] 常用方法等收集.添加扩展类. ...

  6. AJ学IOS(55)多线程网络之图片下载框架之SDWebImage

    AJ分享,必须精品 效果: 代码: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsO ...

  7. SDWebImage源码解读之SDWebImageDownloaderOperation

    第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...

  8. SDWebImage源码解读 之 NSData+ImageContentType

    第一篇 前言 从今天开始,我将开启一段源码解读的旅途了.在这里先暂时不透露具体解读的源码到底是哪些?因为也可能随着解读的进行会更改计划.但能够肯定的是,这一系列之中肯定会有Swift版本的代码. 说说 ...

  9. SDWebImage源码解读 之 UIImage+GIF

    第二篇 前言 本篇是和GIF相关的一个UIImage的分类.主要提供了三个方法: + (UIImage *)sd_animatedGIFNamed:(NSString *)name ----- 根据名 ...

随机推荐

  1. c++ - fcgio.cpp:50: error: 'EOF' was not declared in this scope - Stack Overflow

    c++ - fcgio.cpp:50: error: 'EOF' was not declared in this scope - Stack Overflow fcgio.cpp:50: error ...

  2. Uber司机手机终端问答篇

    手机客户端 Q:自带安卓手机可以使用吗? A:安卓终端已经推出,请在微信页面点左下菜单选取“下载司机端APP”查看! Q:对自带苹果手机的要求? A:4S型号及以上且未越狱:使用3G或4G网络 Q:客 ...

  3. HTML本地存储,localstorg的应用实例

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 假设给Contact的List加一个用字母排序的导航

    效果图: 这样写Layout: <? xml version="1.0" encoding="utf-8"? > <LinearLayout ...

  5. python 序列(list,tuple,str)基本操作

    添加元素: mylist.append() mylist.extend([1, 2]) mylist.insert(1, "pos") 删除元素: mylist.remove(va ...

  6. HTML5API___geolocation

    地理位置查询:geolocation window.navigator.geolocation 该对象下总共有3个方法 Geolocation {getCurrentPosition: functio ...

  7. 我的iOS学习之路(四):动画设置

    在ios的开发过程中,经常需要对视图控件进行变化,如大小,颜色,旋转等,这是如果直接将变化结果呈现出来,就显得不够友好,所以我们通常会使用动画,让用户能够看到变化的过程. 使用动画通常有两种方式,一种 ...

  8. UVa 10806 Dijkstra,Dijkstra(最小费用最大流)

    裸的费用流.往返就相当于从起点走两条路到终点. 按题意建图,将距离设为费用,流量设为1.然后增加2个点,一个连向节点1,流量=2,费用=0;结点n连一条同样的弧,然后求解最小费用最大流.当且仅当最大流 ...

  9. JAVA 对象内存分析

    1.jmap -heap pid 或者 jmap -histo pid 2.jmap -dump:file=folder/dumpFileName.txt,format=b pid 3.对3的输出文件 ...

  10. windows 下提取目录下所有文件的文件名

    tree D:/dir /f >D:/filenames.txt 提取D盘dir目录下所有文件名,写入文件filenames.txt