OC-关联对象

2019-06-27  本文已影响0人  小李不木

分类中不能添加成员变量

需要在category中添加对象属性,可以用关联对象来实现。

分类中添加关联对象

关联对象由AssociationsManager 管理并在AssociationsMapHash 中储存。

AssociationsManager里面是由一个静态AssociationsHashMap来存储所有的关联对象的。这相当于把所有对象的关联对象都存在一个全局map里面。而map的的key是这个对象的指针地址,value是另外一个AssociationsHashMap,里面保存了关联对象的key-value对。

释放时机

runtime 的销毁对象时,objc_destructInstance里面会判断这个对象有没有关联对象,如果有,会调用 object_remove_assocations做关联对象的清理工作。

如果给关联对象赋值为nil,默认就会销毁移除这个关联记录。

dealloc  方法内部会自动判断是否有关联对象,从而进行销毁。

参考地址:

关联对象:iOS之AssociateObject(关联对象) - 简书

关联对象的销毁:

iOS dealloc方法都做了哪些东西? - 简书

iOS 底层 - dealloc 的底层实现 - 简书

上一篇 下一篇

猜你喜欢

热点阅读