Category &associate 关联对象

2019-05-06  本文已影响0人  coder_feng

手动为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

上一篇 下一篇

猜你喜欢

热点阅读