美文网首页
Category类别

Category类别

作者: 涵啸虎 | 来源:发表于2019-03-21 14:59 被阅读0次

类别的定义objc_category

struct category_t { 

const char *name; 

classref_t cls; 

struct method_list_t *instanceMethods; 

struct method_list_t *classMethods; 

struct protocol_list_t *protocols; 

struct property_list_t *instanceProperties;

 };  

需要注意的是里面,name是指所依附的类的名称。category是在runtime阶段通过name找到对应的类对象。

instanceProperties:表示Category里所有的properties,这就是我们可以通过objc_setAssociatedObject和objc_getAssociatedObject增加实例变量的原因,不过这个和一般的实例变量是不一样的。

这里可以辨析一下 属性和成员变量的区别联系。

成员变量 是用于类内部使用,无需与外界交互。成员变量不会生成set、get方法。

实例变量 如果变量的数据类型是一个类则称这个变量为实例变量。实例变量是成员变量的一种特殊情况。

属性 的本质是方法。在类内部会自动生成对应的”_xxx“成员变量。并且创建setter/getter方法。在类别中由于有上面提到的instanceProperties。可以添加objc_setAssociatedObject和objc_getAssociatedObject增加属性。

分类中可以添加实例方法,类方法,甚至可以实现协议,添加属性,不可以添加成员变量。

相关文章

网友评论

      本文标题:Category类别

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