【學習筆記】【OC語言】類方法

1.基本概念
直接能夠用類名來執行的方法(類自己會在內存中佔據存儲空間,裏面有類\對象方法列表)spa

2.類方法和對象方法對比
1>對象方法
以減號-開頭
只能讓對象調用,沒有對象,這個方法根本不可能被執行
對象方法能訪問實例變量(成員變量)code

2>類方法
以加號+開頭
只能用類名調用,對象不能調用
類方法中不能訪問實例變量(成員變量)
使用場合:當不須要訪問成員變量的時候,儘可能用類方法
類方法和對象方法能夠同名對象

3.代碼blog

 1 #import <Foundation/Foundation.h>
 2 /*
 3  對象方法
 4  1> 減號 - 開頭
 5  2> 只能由對象來調用
 6  3> 對象方法中能訪問當前對象的成員變量(實例變量)
 7  
 8  類方法
 9  1> 加號 + 開頭
10  2> 只能由類(名)來調用
11  3> 類方法中不能訪問成員變量(實例變量)
12  
13  
14  類方法的好處和使用場合
15  1> 不依賴於對象,執行效率高
16  2> 能用類方法,儘可能用類方法
17  3> 場合:當方法內部不須要使用到成員變量時,就能夠改成類方法
18  
19  能夠容許類方法和對象方法同名
20  */
21 
22 
23 @interface Person : NSObject
24 {
25     int age;
26 }
27 
28 // 類方法都是以+開頭
29 + (void)printClassName;
30 
31 - (void)test;
32 + (void)test;
33 
34 @end
35 
36 @implementation Person
37 
38 + (void)printClassName
39 {
40     // error:instance variable 'age' accessed in class method
41     // 實例變量age不能在類方法中訪問
42     //NSLog(@"這個類叫作Person-%d", age);
43 }
44 
45 - (void)test
46 {
47     NSLog(@"111-%d", age);
48     
49     //[Person test];
50 }
51 
52 + (void)test
53 {
54     // 會引起死循環
55     //[Person test];
56     
57     NSLog(@"333");
58     
59     // 會引起死循環
60 //    /[Person test];
61 }
62 
63 @end
64 
65 int main()
66 {
67     //[Person printClassName];
68     
69     [Person test];
70     
71     //Person *p = [Person new];
72     //[p test];
73     
74     /*
75      -[Person printClassName]: unrecognized selector sent to instance 0x7fa520c0b370
76      */
77     // 系統會認爲如今調用的printClassName是個對象方法
78     //[p printClassName];
79     
80     return 0;
81 }
相關文章
相關標籤/搜索