1.基本概念
直接可以用类名来执行的方法(类本身会在内存中占据存储空间,里面有类对象方法列表)
2.类方法和对象方法对比
1>对象方法
以减号-开头
只能让对象调用,没有对象,这个方法根本不可能被执行
对象方法能访问实例变量(成员变量)
2>类方法
以加号+开头
只能用类名调用,对象不能调用
类方法中不能访问实例变量(成员变量)
使用场合:当不需要访问成员变量的时候,尽量用类方法
类方法和对象方法可以同名
3.代码
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 }