手动为Category生成一个成员变量
默认情况下,因为分类底层架构的限制,不能添加到成员变量到分类中,但是可以通过关联对象间接实现,这里我先通过我的方式手动实现,然后再通过关联对象提供的API实现,我的实现效果图如下:
测试效果图 源码实现图关联对象提供的API
添加关联对象 void objc_setAssociatedObject(id object, const void * key,id value, objc_AssociationPolicy policy)
获得关联对象 id objc_getAssociatedObject(id object, const void * key)
移除所有关联对象
void objc_removeAssociatedObjects(id object)
代码中key的常见用法
1.static void *SLKey = &SLKey;
到时候直接使用SLKey就可以了
2.static char SLKey;
到时候使用&SLKey;
3.使用get方法作为key
到时候直接使用@selector(getter)
objc_AssociationPolicy
修饰符关联对象原理图
代码架构图 分布图关联对象本身不是存储在被关联对象的内存中,而是存贮在一个全局统一的AssocaitionsManager中,通过map找到object对应的ObjectAssociationMap,然后从中根据key获取相应的value和policy
可以添加微信一起交流学习:fslskz
网友评论