@Categroy又称扩展类,可以动态的为类添加一些新的方法(只是方法,不能添加成员变量)
@使用Categroy对类进行扩展时,不需要创建子类
@如果分类方法与原始类中的相同,则会隐藏原始方法,且不可在分类方法中通过super调用原始方法,这里与继承不同。
@Categroy是一种简单的方式,实现了类的方法的模块化,把不同的类方法分配到不同的类文件中去。
//Student.h 用于方法的声明
#import<Foundation/Foundation.h>
@interface Student : NSObject
- (void)test;
@end
//Student.m 用于方法的实现
#import"Student.h"
@implementaion Student
- (void)test{
NSLog(@"调用了test方法");
}
@end
在不改变上面两个文件的基础上,给Student动态添加一个方法。利用分类可以实现。
分类:
//Student+Test.h
// 给Student添加一个方法,所以要导入其头文件
#import "Student.h"
//类名后面的()代表分类,()里的Test是分类的名称
@interface Student (Test)
//分类只能扩展方法,不能增加成员变量
- (void)test2;
@end
//Student+Test.m
#import"Student+Test.h"
@implemention Student (Test)
- test2{
NSLog(@"调用了test2这个方法");
}
@end
接下来看如何使用
//main.m
#import<Foundation/Foundation.h>
#import"Student.h"
#import"Student+Test.h"//为了调用test2方法,必须将其导入
int main(int argc , const char *argv[])
{
autorealesepoolP{
Student *stu = [[[Student alloc] init] autorealease];
[stu test]; //调用test方法
[stu test2]; //调用test2方法
}
}