OC runtime学习笔记之关联对象

2020-01-21 07:05:38丽君

从源码中可以看到维护对象关联的对象主要有四个

AssociationsManager  // 维护关联关系的全局管理者 ---> 保存AssociationsHashMap
AssociationsHashMap  // 保存关联关系的HashMap ---> 保存对象对应的关联关系的Map
ObjectAssociationMap // 对象关联关系的Map,二级Map
ObjcAssociation      // 关联关系

它们的关系用图像表示如下:

OC,runtimeruntime

相当于从我们的对象外部重新创建并管理了一套对象关联机制,通过双层 hashMap 来维护对象之间的关联关系。其中 AssociationsHashMap(外层Map)是存放在 AssociationsManager 中的全局静态 map。通过要关联对象的内存地址处理得到和对象唯一绑定的 key 在 map 中保存和对象相关的ObjectAssociationMap,此 map 又维护一个一个的 ObjcAssociation (关联策略和值)。

以上以 objc_setAssociatedObject 为例讲解了关联对象的原理,objc_getAssociatedObject和objc_removeAssociatedObjects 原理也是一样。

思维拓展

runtime 中对象关联的原理如上,学习了苹果源码中的思想。可以发现工作中很多类似的数据存储恰好能借鉴一下。

恰好下午研究 runtime 对象关联原理的时候,朋友问我一个多用户系统的实现逻辑。