main.m
1 #import <Foundation/Foundation.h>
2 #import "Person.h"
3 #import "Student.h"
4 int main(int argc, const char * argv[]) {
5
6 // 類的加載在程序啟動(dòng)時(shí)候已經(jīng)完成。
7
8 // 類的初始化
9 [[Student alloc] init];
10 [[Person alloc] init];
11
12
13
14 /*
15 類的加載:
16 程序一啟動(dòng)就會(huì)自動(dòng)加載全部的類,先加載父類,再加載子類。加載的時(shí)候
17 會(huì)自動(dòng)調(diào)用類的類方法load。
18
19 類的初始化:
20 第一次使用類的時(shí)候,只調(diào)用一次。(即可能是第一次使用子類時(shí)候、也可能是使用這個(gè)類的時(shí)候)
21
22 總結(jié):
23 類的加載和初始化順序:
24 1.先加載父類再加載子類、接著加載分類。(程序已啟動(dòng)后,就加載全部類)
25 2.先初始化父類,再初始化子類。(程序第一次用到類時(shí)候,只調(diào)用一次)
26 (如果分類覆蓋了父類或者子類中的initialize方法,那么只會(huì)調(diào)用分類的initialize)
27 */
28
29
30 return 0;
31 }
32
輸出:
1 2015-05-03 10:50:24.751 類的深入研究[2001:24795] Person+load
2 2015-05-03 10:50:24.752 類的深入研究[2001:24795] Student+load
3 2015-05-03 10:50:24.752 類的深入研究[2001:24795] Person(SWP)+load
4 2015-05-03 10:50:24.752 類的深入研究[2001:24795] Person(SWP)+initialize
5 2015-05-03 10:50:24.752 類的深入研究[2001:24795] Student+initialize
6 Program ended with exit code: 0
Person.m
1 //
2 // Person.m
3 // 類的深入研究
4 //
5 // Created by sixleaves on 15/5/3.
6 // Copyright (c) 2015年 itcast. All rights reserved.
7 //
8
9 #import "Person.h"
10
11 @implementation Person
12 + (void)test
13 {
14 NSLog(@"Person+test");
15 }
16
17 // 在類被加載的時(shí)候調(diào)用
18 + (void)load
19 {
20 NSLog(@"Person+load");
21 }
22
23
24 + (void)initialize
25 {
26 NSLog(@"Person+initialize");
27 }
28
29 @end
30
Student.m
1 #import "Student.h"
2
3 @implementation Student
4 + (void)load
5 {
6 NSLog(@"Student+load");
7 }
8
9 + (void)initialize
10 {
11 NSLog(@"Student+initialize");
12 }
13 @end
Person+SWP.m
1 #import "Person+SWP.h"
2
3 @implementation Person (SWP)
4 + (void)load
5 {
6 NSLog(@"Person(SWP)+load");
7 }
8
9 + (void)initialize
10 {
11 NSLog(@"Person(SWP)+initialize");
12 }
13 @end
14