1、Category:分类/类别/类目(一般叫分类)
作用:不改变原有类的基础上,扩展这个类
使用:
//ClassName
@interface ClassName{
NSInteger _num;
}
-(void)method();
@end
@implementation ClassName
@end
//ClassName+CategoryName
@interface ClassName (CategoryName){
//NSInteger _count;不允许
//1、不允许在类别中添加属性(成员变量)
}
-(void)newMethod();
//2、分类中的@property只会生成setter/getter的声明,不会生成实现以及私有的成员变量
@property (nonatomic, assign) double height;
@end
@implementation ClassName (CategoryName)
-(void)method { //3、使用与原类相同的方法名,会覆盖掉原类中的方法,所以起名最好不要重名
_num++;//4、可以访问原有类中的属性
}
//5、如果多个分类中都有与原类中同名的方法,那么编译器会调用最后一个被编译进去的方法
@end
2、Class Extension:类扩展(也叫匿名分类,是Category的一个特例)
作用:为某个类,扩充一些私有的成员变量和方法
使用:写在.m文件中,即.m中不单单是有@implementation和@end之间的部分,也含有@interface和@end之间的部分,且在外部类中,不能访问到这些属性和方法,起到封装的作用
格式:
@interface 类名 ( ) //比分类少一个分类名称,所以有时也叫“匿名分类”
@end