一行行看SDWebImage源码(一)

449 查看

276769-f7b02c377c44f9ea
地表最强

SDWebImage是iOS开发者经常使用的一个开源框架,这个框架的主要作用是:
一个异步下载图片并且支持缓存的UIImageView分类.

UIImageView+WebCache

我们最常用的方法就是这个:

现在开始我们一步步地看这个方法的内部实现:

这里会调用下面这个方法:

我们看UIImageView+WebCache.h文件,我们可以发现为开发者提供了很多类似于- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder的方法.
这些方法最终都会调用- sd_setImageWithURL: placeholderImage: options: progress: completed:,这个方法可以算是核心方法,下面我们看一下- sd_setImageWithURL: placeholderImage: options: progress: completed:
方法的实现:

首先执行

接下来我们来看看[self sd_cancelCurrentImageLoad]内部是怎么执行的:


UIView+WebCacheOperation

下面我们先来看看UIView+WebCacheOperation里面都写了些什么:
UIView+WebCacheOperation这个分类提供了三个方法,用于操作绑定关系

为了方便管理和找到视图正在进行的一些操作,WebCacheOperation将每一个视图的实例和它正在进行的操作(下载和缓存的组合操作)绑定起来,实现操作和视图一一对应关系,以便可以随时拿到视图正在进行的操作,控制其取消等,如何进行绑定我们在下面分析:
UIView+WebCacheOperation.m文件内
- (NSMutableDictionary *)operationDictionary用到了中定义的两个函数:

  • objc_setAssociatedObject
  • objc_getAssociatedObject

    NSObject+AssociatedObject.h

    NSObject+AssociatedObject.m

objc_setAssociatedObject作用是对已存在的类在扩展中添加自定义的属性 ,通常推荐的做法是添加属性的key最好是static char类型的,通常来说该属性的key应该是常量唯一的.
objc_getAssociatedObject根据key获得与对象绑定的属性.