分类中不能添加成员变量
需要在category中添加对象属性,可以用关联对象来实现。
分类中添加关联对象关联对象由AssociationsManager 管理并在AssociationsMapHash 中储存。
AssociationsManager里面是由一个静态AssociationsHashMap来存储所有的关联对象的。这相当于把所有对象的关联对象都存在一个全局map里面。而map的的key是这个对象的指针地址,value是另外一个AssociationsHashMap,里面保存了关联对象的key-value对。
释放时机
runtime 的销毁对象时,objc_destructInstance里面会判断这个对象有没有关联对象,如果有,会调用 object_remove_assocations做关联对象的清理工作。
如果给关联对象赋值为nil,默认就会销毁移除这个关联记录。
dealloc 方法内部会自动判断是否有关联对象,从而进行销毁。
参考地址:
关联对象:iOS之AssociateObject(关联对象) - 简书
关联对象的销毁:
网友评论