>分类的作用作用:
1> 在不修改原有类源文件的情况下,给类扩充新的方法
2> 一个庞大的类可以分模块开发
3> 一个庞大的类可以多人编写
>使用分类的目的
1> 对现有的类进行扩展
比如,你可以扩展Cocoa touch框架中的类,你在类别中增加的方法会被子类所继承,而且
在运行时跟其他的方法没有区别
2> 作为子类的替代手段
不需要定义和使用一个子类,你可以通过类别直接向已有的类里增加方法
3> 对类中方法进行归类
利用category 把一个庞大的类划分成小块来分别进行开发,从而更好的对类中的方法进行维护
// Person.h
// Gategory 分类
#import <Foundation/Foundation.h>
/**
* Person类的声明,无任何方法
*/
@interface Person : NSObject
@end
/**
* Person的分类base的声明
*/
@interface Person (base)
- (void)eat;
- (void)run;
@end
// Person.m
// Gategory 分类
#import "Person.h"
/**
* Person类的实现,无任何方法
*/
@implementation Person
@end
/**
* Person分类的实现
*/
@implementation Person (base)
- (void)eat {
NSLog(@"人会吃");
}
- (void)run {
NSLog(@"人会跑");
}
//
// Person+playGame.h
// Gategory 分类
#import "Person.h"
/**
* playGame分类的声明
*/
@interface Person (playGame)
- (void)playLol ;
- (void)playDota;
@end
// Person+playGame.m
// Gategory 分类
#import "Person+playGame.h"
/**
* playGame分类的实现
*/
@implementation Person (playGame)
- (void)playLol {
NSLog(@"Person正在玩LOL");
}
- (void)playDota {
NSLog(@"Person正在玩Dota");
}
@end
// main.m
// 【分类】声明和实现
#import <Foundation/Foundation.h>
#import "Person.h"
// 1、包含分类的头文件
#import "Person+playGame.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 2、创建一个Person对象
Person *p = [[Person alloc]init];
// 3、调用分类对象
// Person Base 分类的方法
[p eat];
[p run];
// Person playGame分类的方法
[p playDota];
[p playLol];
}
return 0;
}