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 }