iOS关联对象示例详解

2020-01-21 07:43:47刘景俊

背景

在iOS开发中如果我们想给一个对象动态添加属性或者给category添加属性的时候,都是通过runtime的关联对象去实现,那我们添加的属性到底是如何存取的呢?是直接添加到了对象自身的内存中了去吗?带着这些疑问让我们看一runtime的源码,解开关联对象的神秘面纱。

关联对象源码

存值


void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) {
 _object_set_associative_reference(object, (void *)key, value, policy);
}

我们调用此方法的时候,一共传递了四个参数:

 

参数名称 解释
id object 需要关联的对象
void *key 对应的key
id value 对应的值
objc_AssociationPolicy policy 内存管理策略