一行行看SDWebImage源码(二)

436 查看

276769-f7b02c377c44f9ea
地表最强

最近真的真的太太太忙了,都是抽空写的,各种事情,html,iOS客户端升级,炸了


上一篇我们基本上看完了SDWebImage整个工作流程,下面我们具体看一下缓存下载图片中涉及到的相关的类

SDWebImageDownloader

SDWebImageManager实现下载依赖于下载器:SDWebImageDownloader,下载器负责管理下载任务,而执行下载任务是由SDWebImageDownloaderOperation操作完成

SDWebImageManager实现下载 就是调用下面这个方法:

我们还是先来看看SDWebImageDownloader里面都写了些什么
SDWebImageDownloader.h

这些选项主要涉及到下载的优先级,缓存,后台任务执行,cookie处理以及证书认证几个方面,在创建下载操作的时候可以使用组合的选项来完成一些特殊的需求

定义里两个常量,后面通知的时候用的,这里的常量是全局常量

全局常量:不管你定义在任何文件夹,外部都能访问

局部常量:用static修饰后,不能提供外界访问(只能在赋值的.m文件使用,外界不可访问)

定义了三个block

  • 第一个返回已经接收的图片数据的大小,未接收的图片数据的大小,- (void)sd_setImageWithPreviousCachedImageWithURL: placeholderImage: options: progress:completed:
    这个方法里面就有用到,因为图片的下载是需要时间的,所以这个block回调不止回调一次,会一直持续到图片完全下载或者下载失败才会停止回调
  • 第二个block回调 下载完成的图片 , 图片的数据 , 如果有error返回error ,以及下载是否完成的BOOl值
  • 第三个是header过滤:设置一个过滤器,为下载图片的HTTP request选取header.最终使用的headers是经过这个block过滤时候的返回值

定义的属性

看完这些属性后我们在来看SDWebImageDownloader里面的两个核心方法,其他的方法会捎带说一下
第一个就是一开始我们说的,SDWebImageManager会调用的方法

先来看看-addProgressCallback:completedBlock:forURL:createCallback:里面都做了些什么