美文网首页
category的秘密

category的秘密

作者: 凤毛麟角0712 | 来源:发表于2019-11-03 21:09 被阅读0次

category的真面目

objc所有类和对象都是c结构体,category当然也一样,下面是runtime中category的结构:

struct_category_t {

constchar*name;// 1

struct_class_t *cls;// 2

conststruct_method_list_t *instance_methods;// 3

conststruct_method_list_t *class_methods;// 4

conststruct_protocol_list_t *protocols;// 5

conststruct_prop_list_t *properties;// 6

};

1:name注意,并不是category小括号里写的名字,而是类的名字

2:cls要扩展的类对象,编译期间这个值是不会有的,在APP被runtime加载时才会根据name对应到类对象

3:instance_methods这个category所有的-方法

4:class_methods这个category所有的+方法

5:protocols这个category实现的protocol,比较不常用在category里面实现协议,但是确实支持的

6:properties这个category所有的property,这也是category里面可以定义属性的原因,不过这个property不会@synthesize实例变量,一般有需求添加是咧变量属性时会采用objc_setAssociatedObject和objc_getAssociatedObject方法绑定,不过这种方法生成的与一个普通的实例变量完全是两码事。

编译器,你对category干了什么?

@interfaceSark:NSObject

- (void)speak;

@end

@interfaceSark(GayExtention)

- (void)burst;

@end

相关文章

网友评论

      本文标题:category的秘密

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