Category类别

类别的定义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增加属性。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容