分类(category)
一、分类的作用:
在不改变原来类内容的基础上,可以为类增加一些方法。
二、分类的格式:
分类的声明
@interface 类名 (分类名称)
// 方法声明
@end
分类的实现
@implementation 类名 (分类名称)
// 方法实现
@end
三、分类的好处:
1.一个庞大的类可以分模块开发。
2.一个庞大的类可以由多个人来编写,更有利于团队合作。
3.可以给系统自带的类添加分类,便于自己新增一些方便自己工作的方法。
使用注意:
1.分类只能增加方法,不能增加成员变量
#import "Person.h"
@interface Person (MJ)
{
//错误,不能再分类中增加成员变量
int _age;
}
@end
2.分类方法实现中可以访问原来类中声明的成员变量。
#import "Person+MJ.h"
@implementation Person (MJ)
- (void)study
{
//可以访问原来类中声明的成员变量。
NSLog(@"学习-----%d", _age);
}
@end
3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用
4.方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类 --> 父类
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+MJ.h"
#import "Person+JJ.h"
int main()
{
Person *p = [[Person alloc] init];
// 优先去分类中查找,然后再去原来类中找,最后再去父类中找
[p test];
return 0;
}
@implementation Person (JJ)
- (void)test
{
NSLog(@"Person (JJ)-test");
}
@end
@implementation Person
- (void)test
{
NSLog(@"Person-test");
}
@end
输出结果:Person (JJ)-test。
原因:就是上面第4条,优先调用分类的方法!