iOS基础之Objective-C(六)

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

推荐阅读更多精彩内容