背景
在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 | 内存管理策略 |










