OC语言--分类(category)

来源:互联网 发布:ntfs for mac有什么用 编辑:程序博客网 时间:2024/05/17 22:52

一、分类-category

在实际开发中,一个项目包含多种多样的功能,每一个功能可以分成一个模块,这些模块都是属于一个类,但是完成的功能不同,所以在实际开发中,我们一般将庞大的项目工程分成模块,在每一个模块中完成一个功能,这样开发人员只需要负责自己的模块就可以了,不必要去管其他的模块功能。如果要求在不改变原来类的基础上扩充一些模块功能,该怎么办?这样就应用到了分类,分类可以再不改变原来类的基础上扩充项目的一些功能。
二、分类的功能:可以在不修改原来类的基础上给某一个类扩充一些方法。

三、分类的声明和实现:
//分类的声明 .h文件
@interface 原来类名(分类名称)
//...方法列表
@end

//分类的是实现 .m文件
@implementation 原来类名(分类名称)
//...方法的实现
//...
@end
示例:
//默认的文件名称:(Person+Study).h@interface Person(Study)- (void)read;@end//默认的文件名称:(Person+Study).m@implementation Person(Study)- (void)read{    NSLog(@"我正在读书");}@end
四、分类的使用注意:
1.分类只能增加方法,不能增加成员变量;
2.分类方法实现中可以访问原来类的成员变量;
3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,这样导致原来类中的同名方法不能再使用;
4.方法调用优先级:分类(最后编译的分类优先)->原来类->父类
使用注意和说明示例:
//Person.h文件@interface Person@property int age;            //声明成员变量@property int weight;- (void)run;                //声明run方法@end//Person.m文件@implementation Person@synthesize age = _age;        @synthesize weight = _weight;- (void)run                    //实现run方法{    NSLog(@"我在跑步");        }@end//Person+Study.h文件@interface Person(Study)    //Person的Study分类//@property int no;            //分类中不能声明成员变量- (void)read;                //声明read方法- (void)run;                //声明跟Person类中同名的run方法- (void)jump;                //声明jump方法@end//Person+Study.m文件@implementation Person(Study)- (void)read{    NSLog(@"年龄为%d的人正在读书", _age);    //分类中可以访问Person类的成员变量}- (void)run{    NSLog(@"Person+Study的类在跑步");}- (void)jump{    NSLog(@"Person+Study正在跳高");}@end//Person+Sport.h文件@interface Person(Sport)    //Person类的Sport分类- (void)jump;                //声明与Study分类同名的jump方法@endPerson+Sport.m文件@implementation Person(Sport)- (void)jump{    NSLog(@"Person+Sport正在跳高");}@end//main.m文件int main(){    Person *p = [[Person alloc] init];    //创建Person类的对象    p.age = 15;                            //成员变量赋值    p.weight = 40;                [p run];                            //调用Person+Study分类中的run方法,结果为:Person+Study的类在跑步    [p read];                            //结果:年龄为15的人正在读书    [p jump];                            //如果Person+Study比Person+Sport类后编译,结果为:Person+Study正在跳高                                            //否则为:Person+Sport正在跳高}


0 0
原创粉丝点击