·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> 【学习笔记】【OC语言】类方法

【学习笔记】【OC语言】类方法

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

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 }