/*Category作用:
1.在不修改原有类的基础上增加新的方法
2.一个庞大的类可以多模块开发
3.一个庞大的类可以有多个人编写,利于团队合作
4.便于维护
Category目的
1.对现有类进行扩展
2.作为子类的替代手段
3.对类中的方法进行归类
Category步骤
1.声明
格式:@interface 要扩展的类 (类名)@end
2.实现
格式:@implementation要扩展的类 (类名)@end
3.调用
导入分类,直接用,不能写属性,只是增加新的方法
Category注意事项:
1.在分类中可以写@property,但是无法生成属性,只能使用set和get方法,
2.可以用原有类的属性
3.当原有类的方法和分类的方法同名时,优先调用分类的
4.如果多个分类中方法同名,调用最后编译的 项目-->Build phasea--->compile sources,
*/
#import <Foundation/Foundation.h>
@interface Person : NSObject
-(void)run;
@end
@implementation Person
-(void)run{
NSLog(@"running");
}
@end
@interface Person (base) //@interface 要扩展的类 (类名)@end
-(void)eat;
-(void)run;
@end
@implementation Person (base) // @implementation要扩展的类 (类名)@end
-(void)eat{
NSLog(@"eating");
}
-(void)run{
NSLog(@"running!running!running!");
}
@end
@interface Person (work)
-(void)walk;
-(void)run;
@end
@implementation Person (work)
-(void)walk{
NSLog(@"walking");
}
-(void)run{
NSLog(@"running!running!");
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p=[Person new];
[p run];//当原有类的方法和分类的方法同名时,优先调用分类的;如果多个分类中方法同名,调用最后编译的
/*
案例运行结果:
2016-01-24 16:01:50.277 Category分类[891:26287]running!running!
2016-01-24 16:01:50.279 Category分类[891:26287] eating
2016-01-24 16:01:50.279 Category分类[891:26287] walking
Program ended with exit code: 0
*/
[p eat];
[p walk];
}
return 0;
}