首页 > 学院 > 开发设计 > 正文

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

2019-11-14 18:42:31
字体:
来源:转载
供稿:网友

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 : NSObject24 {25     int age;26 }27 28 // 类方法都是以+开头29 + (void)PRintClassName;30 31 - (void)test;32 + (void)test;33 34 @end35 36 @implementation Person37 38 + (void)printClassName39 {40     // error:instance variable 'age' accessed in class method41     // 实例变量age不能在类方法中访问42     //NSLog(@"这个类叫做Person-%d", age);43 }44 45 - (void)test46 {47     NSLog(@"111-%d", age);48     49     //[Person test];50 }51 52 + (void)test53 {54     // 会引发死循环55     //[Person test];56     57     NSLog(@"333");58     59     // 会引发死循环60 //    /[Person test];61 }62 63 @end64 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 0x7fa520c0b37076      */77     // 系统会认为现在调用的printClassName是个对象方法78     //[p printClassName];79     80     return 0;81 }

 

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表