美文网首页
Association 对象关联

Association 对象关联

作者: weixhe | 来源:发表于2020-09-24 10:00 被阅读0次

关联对象并不是存储在被关联对象本身内存中,而是存储在全局的统一的一个 AssociationManager中(里边有个hashMap)

实现关联对象技术的核心对象有

  • AssociationsManager
  • AssociationsHashMap
  • ObjectAssociationsMap
  • ObjcAssociation
void objc_setAssociationObject(id object, const void * key, id value, objc_AssociationPolicy policy);

`AssociationsManager`内部有一个`AssociationsHashMap`的对象(可以看做字典)
`AssociationsHashMap`字典的key是传过来的object,value是`ObjectAssociationMap`对象(可以看做字典)
`ObjectAssociationMap`字典的key是传过来的key,value是`ObjcAssociation`
`ObjcAssociation`中存放者value和policy

// 伪代码:
class AssociationsManager {
    static AssociationsHashMap *_map;
}

// DenseMap是个map,存放key,value
typedef DenseMap<DisguisedPtr<objc_object>, ObjectAssociationMap> AssociationsHashMap;
typedef DenseMap<const void *, ObjcAssociation> ObjectAssociationMap;

class ObjcAssociation {
    uintptr_t _policy;
    id _value;
}

原理图:



面试题

1. Category能否添加成员变量?如果可以,如何给Category添加成员变量

不能直接给Category添加成员变量,但是可以间接实现Category添加成员变量的效果

可以通过关联对象的方式给Category添加property属性

相关文章

网友评论

      本文标题:Association 对象关联

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