美文网首页
iOS runtime关联对象 objc_setAssociat

iOS runtime关联对象 objc_setAssociat

作者: 光之盐汽水 | 来源:发表于2018-06-28 17:06 被阅读0次

关联对象的作用:

关联对象可以给某个对象关联一个或者多个其他对象,这些对象通过健来区分。

创建存储关联对象objc_setAssociatedObject:通过objc_setAssociatedObject把一个对象与另外一个对象进行关联。相当于 setValue:forKey 进行关联value对象。

void objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key, id _Nullable value, objc_AssociationPolicy policy)

*    第一个参数:object    被关联的对象(源对象)

*    第二个参数:key    要关联的对象的key,一般设置成全局静态变量。要保证全局唯一,key与关联的对象是一一对应关系。

*    第三个参数:value     关联的对象

*    第四个参数:policy    关联时采用的协议,即存储策略(枚举类型)

关联协议objc_AssociationPolicy关联策略表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的

typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy){

    OBJC_ASSOCIATION_ASSIGN =0,

    OBJC_ASSOCIATION_RETAIN_NONATOMIC =1,

    OBJC_ASSOCIATION_COPY_NONATOMIC =3,

    OBJC_ASSOCIATION_RETAIN =01401,

    OBJC_ASSOCIATION_COPY =01403/**< Specifies that the associated object is copied.

};

*    OBJC_ASSOCIATION_ASSIGN 相当于@property的assign

*    OBJC_ASSOCIATION_RETAIN_NONATOMIC 相当于@property的nonatomic + retain

*    OBJC_ASSOCIATION_COPY_NONATOMIC 相当于@property的nonatomic + copy

*    OBJC_ASSOCIATION_RETAIN 相当于@property的retain

*    OBJC_ASSOCIATION_COPY 相当于@property的copy

获取关联对象objc_getAssociatedObject:用来读取关联对象

id _Nullable objc_getAssociatedObject(id _Nonnull object,const void * _Nonnull key)

*    第一个参数:object    要读取的关联对象的源对象。

*    第二个参数:key    要读取关联对象对应的key值。

移除关联对象objc_removeAssociatedObjects:移除某个对象身上的所有关联的对象。(通常情况下不建议使用这个函数,只有在需要把对象恢复到“原始状态”的时候才会使用这个函数。)

void objc_removeAssociatedObjects(id _Nonnull object)

*    第一个参数:object    要移除关联对象的源对象。

ps:objc_removeAssociatedObjects方法是移除object上的所有关联对象。所以如果我们只是需要移除object上面的一条关联对象,可以通过objc_setAssociatedObject函数传入nil的方式来达到移除某个关联对象的目的。

相关文章

  • iOS runtime关联对象 objc_setAssociat

    关联对象的作用: 关联对象可以给某个对象关联一个或者多个其他对象,这些对象通过健来区分。 创建存储关联对象objc...

  • iOS runtime 关联对象

    最近在看runtime的相关知识,感觉里面东西还蛮多的,反正感觉runtime被戴上了很多高大上的帽子。查看了很多...

  • iOS runtime 关联对象

    关联对象 Associated Object 顾名思义,就是把一个对象关联到另外一个对象身上。 关于关联对象,ru...

  • Effective Objective-C 2.0 第二章 十、

    我之前已经在这篇文章iOS runtime 关联对象做了详细介绍。本篇只是简单介绍下。 创建关联对象: id ob...

  • iOS runtime应用:关联对象

    问题:“如何给OC对象(如 NSArray、UIViewController等)添加一个属性,且不使用继承的情况下...

  • iOS~runtime之关联对象

    什么是runtime? RunTime又叫运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消...

  • 【iOS开发】Runtime关联对象

    众所周知,Category 是不能添加成员变量的,倒是可以添加属性,不过不会自动生成 getter 和 sette...

  • iOS关联对象技术原理

    iOS关联对象技术原理 iOS关联对象技术原理

  • ios运行时一些方法说明

    一. 关联对象主要函数: 基本说明:关联对象就是runTime界的NSMultableDictionary voi...

  • Runtime - 关联对象

    马上就要开始新的项目,这个礼拜抽空来写一篇博客。于是就写一个比较贴近大家工作开发的runtime其中一个用法吧。一...

网友评论

      本文标题:iOS runtime关联对象 objc_setAssociat

      本文链接:https://www.haomeiwen.com/subject/hqvgyftx.html