1. Category(以下称类别)非常类似于设计模式中的装饰设计模式,即原先的类不满足需求,需要为其增加新的方法。(但不能增加成员变量)
2. 使用:
基础类及实现
Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
-(void) print;
@end
Student.m
#import "Student.h"
@implementation Student
-(void) print {
NSLog(@"I am a student.");
}
@end
类别:
Student + Age.h
#import "Student.h"
// 类别类似于设计模式中的装饰模式
// Student表示一个类
// ()表示有一个类别,
// (Age)表示有个Age类别想扩充Student的方法(在保留原有所有方法的基础上)(但不能扩充属性)
@interface Student (Age)
-(void) printAge;
@end
Student + Age.m:
#import "Student+Age.h"
@implementation Student (Age)
-(void) printAge {
NSLog(@"Age is 20");
}
@end
main.m(arc模式),直接像调用基础类的方法一样调用类别的方法,就像基础类已经扩充了新的方法一样。
#import <Foundation/Foundation.h>
#import "Student+Age.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Student *student = [[Student alloc] init];
[student print];
[student printAge];
// [student release];
}
return 0;
}
3. 使用场景:
1. 需求变更,需要添加新的方法;
2. 一个类是由多人协作开发(例如使用git),每个人都可以写一个新的类别
3. 装饰一个基础类。例如觉得NSString不够用,可以新建个类别来补充