分类(Category)与类拓展(Extension)

2018-05-22  本文已影响0人  拉布拉熊

分类(Category)

1.分类(Category)是什么?

分类是oc特有的语法,表示指向分类的结构体指针。分类只能给类增加方法,不能给类增加成员变量。

结构体指针的定义:

Category 是表示一个指向分类的结构体的指针,其定义如下:

typedefstructobjc_category*Category;

structobjc_category{

 char*category_name OBJC2_UNAVAILABLE;// 分类名

char*class_name OBJC2_UNAVAILABLE;// 分类所属的类名    structobjc_method_list*instance_methodsOBJC2_UNAVAILABLE;// 实例方法列表

structobjc_method_list*class_methodsOBJC2_UNAVAILABLE;// 类方法列表structobjc_protocol_list*protocolsOBJC2_UNAVAILABLE;// 分类所实现的协议列表

}

通过分类的结构体我们可以发现,结构体里面没有“属性列表”,所以不能给类增加实例变量,但我们依然可以在分类中使用@property声明一个属性,但只是声明,并没有生成实例变量和存取方法(setter/getter)。基于oc动态语言的特性,我们可以在运行时动态的生成setter/getter方法,生成属性(注意:并没有生成成员变量/实例变量) 

2.分类的作用?

在运行时,动态的给类增加方法。

上一篇下一篇

猜你喜欢

热点阅读