分类(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.分类的作用?
在运行时,动态的给类增加方法。