SDWebImage源码阅读(十五)UIView+WebCacheOperation

  这个分类主要用来对 UIView 的图像下载操作添加、取消和移除。

 .h

1  *  Set the image load operation (storage in a UIView based dictionary)
2  *
3  *  @param operation the operation
4  *  @param key       key for storing the operation
5  */
6 - (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key;

  设置图像加载操作。

1 /**
2  *  Cancel all operations for the current UIView and key
3  *
4  *  @param key key for identifying the operations
5  */
6 - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key;

  根据 key 取消 UIView 的所有当前操作。

1 /**
2  *  Just remove the operations corresponding to the current UIView and key without cancelling them
3  *
4  *  @param key key for identifying the operations
5  */
6 - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key;

  仅仅根据 key 移除对应的当前 UIView 的操作,并没有取消它们。

 .m

1 static char loadOperationKey;
2
3 typedef NSMutableDictionary<NSString *, id> SDOperationsDictionary;

  定义一个静态 char loadOperationKey。

  定义一个 key 是字符串 value 是id 的可变字典类型。

1 - (SDOperationsDictionary *)operationDictionary {
2     SDOperationsDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey);
3     if (operations) {
4         return operations;
5     }
6     operations = [NSMutableDictionary dictionary];
7     objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
8     return operations;
9 }

  给 UIView 动态添加一个 operationDictionary 属性。

 objc_getAssociatedObject

 1 /**
 2  * Returns the value associated with a given object for a given key.
 3  *
 4  * @param object The source object for the association.
 5  * @param key The key for the association.
 6  *
 7  * @return The value associated with the key \e key for \e object.
 8  *
 9  * @see objc_setAssociatedObject
10  */
11 OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)
12     OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0);

 objc_setAssociatedObject

 1 /**
 2  * Sets an associated value for a given object using a given key and association policy.
 3  *
 4  * @param object The source object for the association.
 5  * @param key The key for the association.
 6  * @param value The value to associate with the key key for object. Pass nil to clear an existing association.
 7  * @param policy The policy for the association. For possible values, see “Associative Object Behaviors.”
 8  *
 9  * @see objc_setAssociatedObject
10  * @see objc_removeAssociatedObjects
11  */
12 OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
13     OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0);

  

时间: 2024-10-06 20:37:25

SDWebImage源码阅读(十五)UIView+WebCacheOperation的相关文章

【原】SDWebImage源码阅读(五)

[原]SDWebImage源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 前面的代码并没有特意去讲SDWebImage的缓存机制,主要是想单独开一章节专门讲解缓存.之前我们也遇到一些缓存的属性和方法,比如storeImage.queryDiskCacheForKey.memCache等等. SDWebImage的缓存分为两个部分,一个内存缓存,使用NSCache实现,另一个就是硬盘缓存(disk),使用NSFileManager实现. 不过这么多函数,

【原】SDWebImage源码阅读(二)

[原]SDWebImage源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 解决上一篇遗留的坑 上一篇中对sd_setImageWithURL函数简单分析了一下,还留了一些坑.不过因为我们现在对这个函数有一个大概框架了,我们就按顺序一个个来解决. 首先是这一句代码: objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 就是给UIImageVi

【原】SDWebImage源码阅读(三)

[原]SDWebImage源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1.SDWebImageDownloader中的downloadImageWithURL 我们来到SDWebImageDownloader.m文件中,找到downloadImageWithURL函数.发现代码不是很长,那就一行行读.毕竟这个函数大概做什么我们是知道的.这个函数大概就是创建了一个SDWebImageSownloader的异步下载器,根据给定的URL下载image. 先映入眼帘的

【原】SDWebImage源码阅读(一)

[原]SDWebImage源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 一直没有系统地读过整套源码,就感觉像一直看零碎的知识点,没有系统读过一本专业经典书籍一样,会有点发虚,感觉知识体系不健全!废话少说,这次我决定好好阅读下SDWebImage的源码,我的阅读方式,是带着问题去阅读源码,然后强迫自己写博客. 2. SDWebImage是做什么的? 既然是要带着问题读,那么第一个问题就来了,SDWebImage是做什么的?SDWebImage是一个开源

SDWebImage源码阅读-第三篇

这一篇讲讲不常用的一些方法. 1 sd_setImageWithPreviousCachedImageWithURL: placeholderImage: options: progress: completed: 取得上次缓存的图片,然后作为占位图的参数再次进行一次图片设置. - (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options

SDWebImage源码阅读(四)SDWebImageDecoder

一般我们都是使用: 1 + (nullable UIImage *)imageNamed:(NSString *)name; // load from main bundle 和: 1 + (nullable UIImage *)imageWithContentsOfFile:(NSString *)path; 两种方式加载图片,它们两个的区别在SDWebImage源码阅读前的准备(三)UIImage.h 里面的 "(六):加载和创建UIImage 的类方法和实例方法:"部分有详细的介

SDWebImage源码阅读(二)NSData+ImageContentType

NSData+ImageContentType 是NSData 的分类(Category). 创建分类的步骤: 在Xcode 工程页面,按command + N ,在iOS -> Source 选择Objective-C File ,点击Next ,File Type 选择 Category ,file 框里输入分类名字,Calss 为要添加分类的类,可以是系统的类也可以是自定义的类,当然这里出现的主要是系统的类. 分类的描述: 无论一个类设计的如何完美,都不可避免的会遇到没有预测到的需求,那怎

SparkStreaming(源码阅读十二)

要完整去学习spark源码是一件非常不容易的事情,但是咱可以积少成多嘛~那么,Spark Streaming是怎么搞的呢? 本质上,SparkStreaming接收实时输入数据流并将它们按批次划分,然后交给Spark引擎处理生成按照批次划分的结果流: SparkStreaming提供了表示连续数据流的.高度抽象的被称为离散流的Dstream,可以使用kafka.Flume和Kiness这些数据源的输入数据流创建Dstream,也可以在其他Dstream上使用map.reduce.join.win

Spark之SQL解析(源码阅读十)

如何能更好的运用与监控sparkSQL?或许我们改更深层次的了解它深层次的原理是什么.之前总结的已经写了传统数据库与Spark的sql解析之间的差别.那么我们下来直切主题~ 如今的Spark已经支持多种多样的数据源的查询与加载,兼容了Hive,可用JDBC的方式或者ODBC来连接Spark SQL.下图为官网给出的架构.那么sparkSql呢可以重用Hive本身提供的元数据仓库(MetaStore).HiveQL.以及用户自定义函数(UDF)及序列化和反序列化的工具(SerDes). 下来我们来