将类的实现方法代码反三到便于管理的数个分类之中. 类中经常容易填满各种方法, 而这些方法的代码则全部堆在一个巨大的实现文件中, 有时这么做事不合理的,因为即使通过重构把这个类打散, 效果也不会太好, 可以用 '分类'机制把刚才的类改写
例如
#import@interface EOCPerson : NSObject
@property (nonatomic, copy, readly) NSString * firsrName;
@property (nonatomic, copy, readly) NSString * lastName;
@property (nonatomic, strong, readly) NSArray * friends;
- (id)initWithFirstName:(NSString *) firstName andlastName:(NSString *)lastName;
// Friendship methods
- (void)addFriend:(EOCPerson *)person;
- (void)removeFriend:(EOCPerson *)person;
- (void)isFriendsWith:(EOCPerson *)person;
// Work methods - (void)performDaysWork;
- (void)takeVacationFromWork;
// Play methods
- (void)goToTheCinema; - (void)goToSportsgame;
@end
在实现该类时, 所有方法的代码可能会写在一个大文件, 如果还向类中继续添加方法的话, 那么源代码文件就会越来越大, 变得难与管理., 所以说, 应该吧这样的类分成几个不同的部分,
例如, 可以用'分类'机制把刚才的类改写成下面的这样
#import@interface EOCPerson : NSObject
@property (nonatomic, copy, readly) NSString * firsrName;
@property (nonatomic, copy, readly) NSString * lastName;
@property (nonatomic, strong, readly) NSArray * friends;
- (id)initWithFirstName:(NSString *) firstName andlastName:(NSString *)lastName;
@end
@interface EOCPerson (Friendship)
- (void)addFriend:(EOCPerson *)person;
- (void)removeFriend:(EOCPerson *)person;
- (void)isFriendsWith:(EOCPerson *)person;
@end
@interface EOCPerson (Work)
- (void)performDaysWork;
- (void)takeVacationFromWork;
@end
@ininterface EOCPerson (Play)
- (void)goToTheCinema;
- (void)goToSportsgame;
@end
现在,类的实现代码按照方法分成了好几个部分, 所以说, 这项语言特性当然就叫做'分类'啦, 在本例中, 类的基本要素 都实现在'住实现'里, 执行不同类型的操作所用的另外几套方法则归入各个分类中.
使用分类机制之后, 依然可以把整个类定义在一个接口文件中, 并将其代码写在一个实现文件中. 可是,随着文件数量的增加, 当前这份试下文件很宽就变得更大了,此时可以把每个分类提取到各自的文件中.
EOCPerson+Friendship(.h/.m)
EOCPerson+Work(.h/.m)
EOCPerson+Play(.h/.m) 比方说,与交友功能相关的那个分类可以这样写
.h 文件
#import "EOCPerson.h"
@interface EOCPerson (Friendship)
- (void)addFriend:(EOCPerson *)person;
- (void)removeFriend:(EOCPerson *)person;
- (void)isFriendsWith:(EOCPerson *)person;
@end
.m文件
#implementation EOCPerson (Friendship)
- (void)addFriend:(EOCPerson *)person{
///////
}
- (void)removeFriend:(EOCPerson *)person{
///////
}
- (void)isFriendsWith:(EOCPerson *)person{
///////
}
@end
通过分类机制, 可以把类代码分成很多个抑郁管理的小块, 以便单独检视, 使用分类机制之后, 如果想用分类中的方法, 那么记得在引入 EOCPerson.h 时一并引入分类的头文件.