美文网首页
Category能否添加成员变量,如果可以,如何添加?

Category能否添加成员变量,如果可以,如何添加?

作者: 是超超呀 | 来源:发表于2021-04-29 10:47 被阅读0次

不能直接给category添加成员变量,但是可以间接实现category有成员变量的效果

方法一:可以给分类添加字典(全局),但是有很多弊端(不推荐)会造成内存泄漏(字典不会释放),线程安全,每多一个属性,就需要多一个字典。

方法二:关联对象(并不是存储在关联对象本身的内存中)

添加关联对象

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常见的用法

static void *MyKey = &MyKey;

static char MyKey;  (用char类型的原因是只占一个字节,int占四个字节)

使用属性名作为key

使用get方法的@selecor作为key(推荐使用)

关联对象的底层数据结构:

结构体中有一个成员变量AssociationsHashMap,它的key是传入的object指针(实际上做了一些位运算),它的value是一个ObjectAssociationMap,ObjectAssociationMap的key是传入的指针地址,它的value是一个ObjcAssociation,ObjcAssociation结构中有两个成员变量,value和policy(传入的value和策略)

关联对象的原理

相关文章

  • IOS基础知识-关联对象原理篇

    Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,但是可以...

  • iOS底层总结- 关联对象实现原理

    前言 Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,但...

  • 关联对象实现原理

    问题: Category能否添加成员变量?如果可以,如何给Category添加成员变量? 1. 给Category...

  • iOS底层原理总结 - 关联对象实现原理

    面试题 Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,...

  • Category-关联对象

    分类添加属性 Category能否添加成员变量?如果可以,如何给Category添加成员变量?不能直接给Categ...

  • 底层6:为Category间接添加成员变量

    面试题:Category能否添加成员变量?如果可以,如何给Category添加? 不能直接给Category添加成...

  • Category能否添加成员变量

    Category能否添加成员变量,如果可以,怎么给Category添加成员变量? 不能直接给Category添加成...

  • 关联对象

    O、题:Category能否添加成员变量?如果可以,如何给Category添加成员变量? 答:不能直接给Categ...

  • iOS 关联对象

    由问题 category能否添加成员变量,如果可以,如何给category添加成员变量? 答案:不可以直接给cat...

  • iOS底层原理 - 关联对象

    面试题引发的思考: Q: Category能否添加成员变量?如果可以,如何给Category添加成员变量? 不能直...

网友评论

      本文标题:Category能否添加成员变量,如果可以,如何添加?

      本文链接:https://www.haomeiwen.com/subject/unqbrltx.html