Person.h
1
2 #import <Foundation/Foundation.h>
3
4 @interface Person : NSObject
5 {
6 int _test;
7 }
8 @property int age;
9 @property NSString * name;
10
11 - (id)initWithName:(NSString *)name andAge:(int)age;
12 - (void)test;
13 @end
Person.m
1 #import "Person.h"
2 @implementation Person
3
4 - (id)initWithName:(NSString *)name andAge:(int)age
5 {
6
7 if (self = [super init]) {
8
9 _name = name;
10 _age = age;
11
12 }
13 return self;
14 }
15
16 - (void)test
17 {
18
19 NSLog(@"Person-test");
20 }
21 @end
Person+Study.h
1 #import "Person.h" // 包含Person文件才能找到Person這個類,才能給其加分類。
2
3 @interface Person (Study)
4 - (void)study;
5
6 @end
Person+Study.m
1 #import "Person+Study.h"
2
3 @implementation Person (Study)
4 - (void)study
5 {
6
7 NSLog(@"Person+Study, _test = %d", _test);
8 }
9
10 - (void)test
11 {
12
13 NSLog(@"Person (Study)-test");
14 }
15 @end
Person+JJ.h
1 #import "Person.h"
2
3
4 @interface Person (JJ)
5
6 - (void)study2;
7
8 @end
Person+JJ.m
1
2
3 #import "Person+JJ.h"
4
5 @implementation Person (JJ)
6
7 - (void)study2
8 {
9
10
11 }
12
13 - (void)test
14 {
15 NSLog(@"Person (jj)-test");
16 }
17 @end
分類.m
1
2 #import <Foundation/Foundation.h>
3 #import "Person.h"
4 #import "Person+Study.h"
5 #import "Person+JJ.h"
6 int main() {
7
8 Person *p = [[Person alloc] init];
9 [p study];
10 // 有先分類中找 ==》 類中找 ==》 父類中找
11 [p test]; // 分類中擴充了原來的方法,會覆蓋掉原來的方法。
12 return 0;
13 }
14
15 /*
16 A.分類的作用:
1.在不改變這個類的模型(文件內(nèi)容)基礎(chǔ)上,為這個類增加方法。
17 2.基于分類的作用,我們可以用分類來實現(xiàn)模塊化開發(fā)。
18 B.分類的規(guī)范:
19 1.分類一般是以模塊名命名。
20 2.分類的文件名是類名+文件名。
21
22 C.分類(3個)注意事項:
23
24 1 分類只能增加方法,不能加成員變量。但分類中的方法也能訪問非私有的成員變量。
25 2 分類可以重新實現(xiàn)原來類中的方法,會覆蓋掉這個方法。
26 3 方法調(diào)用的優(yōu)先級 :
27 1.分類 》 原來類 》 父類
28 2.多個分類中增加相同的方法,最后一個編譯的才有效
29
30
31
32 Tips:
33 可以選中項目,在Build Phase =》 Compile Source中查看編譯的順序,并作出調(diào)整。
34 驗證方法:
35 在終端分別輸入編譯鏈接命令,并運行程序驗證
36 cc Person.m Person+Study.m Person+JJ.m 分類.m +-framework Foundation
37 ./a.out
38
39 cc Person.m Person+JJ.m Person+Study.m 分類.m +-framework Foundation
40 ./a.out
41 */