1 // 2 // main.m 3 // 分类 4 // 5 6 /* 7 分类:Category (类目,类别)(OC特有) 8 命名:Person+EE (Person+ 自动生成,只要写后面的,一般以模块名为名) 9 分类的作用:在不改变原来类的内容的情况下,可以给我们的类添加一些方法 10 注意: 11 1>分类只能增加方法,不能增加成员变量 12 2>分类方法的实现中可以访问原来类中的成员变量 13 3>分类可以重写原来类中的方法,但是会覆盖掉原来类的方法(一般不会再分类当中重写原来类的方法) 14 4>调用优先级:分类优先(最后参与编译的分类会优先调用) 15 */ 16 17 #import <Foundation/Foundation.h> 18 #import "Person.h" 19 #import "Person+EE.h" 20 #import "Person+BB.h" 21 int main(int argc, const char * argv[]) { 22 Person *p = [[Person alloc]init]; 23 p.age = 10; 24 [p test]; 25 // [p run]; 26 return 0; 27 }
1 // 2 // Person.h 3 // 分类 4 // 5 6 #import <Foundation/Foundation.h> 7 8 @interface Person : NSObject 9 { 10 int _age; 11 12 } 13 @property int age; 14 - (void)test; 15 @end
1 // 2 // Person.m 3 // 分类 4 // 5 6 #import "Person.h" 7 8 @implementation Person 9 10 - (void)test{ 11 12 NSLog(@"调用Person-test方法"); 13 14 } 15 @end
创建分类
1 // 2 // Person+EE.h 3 // 分类 4 // 5 6 #import "Person.h" 7 8 @interface Person (EE) 9 //{ 10 // int a; 11 // 12 //} 13 - (void)run; 14 @end
1 // 2 // Person+EE.m 3 // 分类 4 5 #import "Person+EE.h" 6 7 @implementation Person (EE) 8 9 - (void)run{ 10 self.age = 10; 11 NSLog(@"调用了run方法=%d",self.age); 12 13 } 14 15 - (void)test{ 16 17 NSLog(@"调用分类EE的test方法"); 18 19 } 20 @end
1 // 2 // Person+BB.h 3 // 分类 4 // 5 6 7 #import "Person.h" 8 9 @interface Person (BB) 10 11 @end
1 // 2 // Person+BB.m 3 // 分类 4 // 5 6 7 #import "Person+BB.h" 8 9 @implementation Person (BB) 10 11 - (void)test{ 12 13 NSLog(@"调用分类BB的test方法"); 14 15 } 16 @end
分类的优先级 从下往上顺序可调
/*
分类:Category (类目,类别)(OC特有)
命名:Person+EE (Person+ 自动生成,只要写后面的,一般以模块名为名)
分类的作用:在不改变原来类的内容的情况下,可以给我们的类添加一些方法
注意:
1>分类只能增加方法,不能增加成员变量
2>分类方法的实现中可以访问原来类中的成员变量
3>分类可以重写原来类中的方法,但是会覆盖掉原来类的方法(一般不会再分类当中重写原来类的方法)
4>调用优先级:分类优先(最后参与编译的分类会优先调用)
*/