您所在的位置:小祥子 » 编程 » IOS » 正文

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

时间:2015-07-13 编辑:登山赏枫 来源:Cnblogs

1.基本概念
直接可以用类名来执行的方法(类本身会在内存中占据存储空间,里面有类\对象方法列表)

2.类方法和对象方法对比
1>对象方法
以减号-开头
只能让对象调用,没有对象,这个方法根本不可能被执行
对象方法能访问实例变量(成员变量)

2>类方法
以加号+开头
只能用类名调用,对象不能调用
类方法中不能访问实例变量(成员变量)
使用场合:当不需要访问成员变量的时候,尽量用类方法
类方法和对象方法可以同名

3.代码

 #import <Foundation/Foundation.h>
 /*
  对象方法
  1> 减号 - 开头
  2> 只能由对象来调用
  3> 对象方法中能访问当前对象的成员变量(实例变量)
  
  类方法
  1> 加号 + 开头
  2> 只能由类(名)来调用
  3> 类方法中不能访问成员变量(实例变量)
  
  
  类方法的好处和使用场合
  1> 不依赖于对象,执行效率高
  2> 能用类方法,尽量用类方法
  3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法
  
  可以允许类方法和对象方法同名
  */
 
 
 @interface Person : NSObject
 {
     int age;
 }
 
 // 类方法都是以+开头
 + (void)printClassName;
 
 - (void)test;
 + (void)test;
 
 @end
 
 @implementation Person
 
 + (void)printClassName
 {
     // error:instance variable 'age' accessed in class method
     // 实例变量age不能在类方法中访问
     //NSLog(@"这个类叫做Person-%d", age);
 }
 
 - (void)test
 {
     NSLog(@"111-%d", age);
     
     //[Person test];
 }
 
 + (void)test
 {
     // 会引发死循环
     //[Person test];
     
     NSLog(@"333");
     
     // 会引发死循环
 //    /[Person test];
 }
 
 @end
 
 int main()
 {
     //[Person printClassName];
     
     [Person test];
     
     //Person *p = [Person new];
     //[p test];
     
     /*
      -[Person printClassName]: unrecognized selector sent to instance 0x7fa520c0b370
      */
     // 系统会认为现在调用的printClassName是个对象方法
     //[p printClassName];
     
     return 0;
 }
 
关键词:学习 笔记 方法