AssociatedObject的实现原理

2018-05-10  本文已影响0人  GTMYang

key:主对象的~uintptr_t(uint指针取反)
value:ObjectAssociationMap<key, assocatedOBJ>
存储到全局的HashMap中

objc_getAssociatedObject

先通过 key = 主对象的~uintptr_t(uint指针取反)从全局HashMap中拿到
value:ObjectAssociationMap<key, assocatedOBJ>
然后通过key从ObjectAssociationMap<key, assocatedOBJ>中拿到assocatedOBJ

objc_setAssociatedObject

通过key在全局HashMap中找ObjectAssociationMap<key, assocatedOBJ>

找到->检查key是否已用->key已用就用新对象替换旧对象
key未用直接加进去

没找到->new ObjectAssociationMap -> 直接加进去

上一篇 下一篇

猜你喜欢

热点阅读