黑马程序员——类方法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

黑马程序员——类方法

 

------- android培训IOS培训、期待与您交流! ----------

****类方法优点****

1、节省空间,提高效率,作为工具的时候使用

2、类方法比对象方法优化体现在不用创建对象就能执行行为。 在内存中, + 识别为类方法, 直接去类的存储空间中调用方法。 对象方法则需要通过对象指针访问对象, 通过指针访问类空间, 才能调用到方法

3、类方法不用创建一个实例,不依赖任何对象的方法

 

 1 #import <Foundation/Foundation.h>
 2 @interface Cat : NSObject
 3 {
 4     @public;
 5     int speed;
 6     }
 7 + (void) cat:(int)speed;  //声明一个类方法
 8 @end
 9 @implementation Cat
10 + (void) cat:(int)speed   //类方法的实现
11 {
12     NSLog(@"正在以%d速度跑",speed);
13 }
14 @end
15 int main (int argc, const char *argv[]) 
16 { 
17     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];                         
18    
19     //在此处输入Objective-C代码
20     [Cat cat:200];
21     [pool drain];
22     return 0;
23 }
24 /*
25 声明和实现:
26 @interface Cat : NSObject
27 + (void) cat;  //声明一个类方法
28 @end
29 @implementation Cat
30 + (void) cat   //类方法的实现
31 {
32     NSLog(@"在爬树");
33 }
34 @end
35 int main()
36 {
37     [Cat cat];  //通过类名调用类方法
38     
39 }

类方法调用:[类名称 类方法名称];

注意:

1、类不能调用对象的方法, 对象不能调用类的方法。

***2、类方法不能使用类的实例变量(成员变量)***

****类方法实现****

+ (void) cat

{

   NSLog(@"正在以%d速度跑",_speed);//错误代码:不能使用成员变量

}

****对象方法实现****

- (void) cat

{

   NSLog(@"正在以%d速度跑",_speed);//可以使用成员变量

}

 

3、类方法可以从父类继承,子类可以重写类方法

***4、当方法内部不需要访问成员变量时, 就可以使用类方法。

 

对象方法:

以“-”开头

可以使用成员变量

用对象调用对象方法

对象方法可以调用当前对象或其他对象的方法

   1、当前对象方法中创建对象(当前的也可以是其他类对象),使用新创建的对象调用对象方法

   2、使用self

   3、对象作为方法的参数传递过来,可以使用传递过来的对象调用方法

类方法:

以“+”开头

不可以使用成员变量

用类名调用类方法

类方法可以调用当前类或其他类的方法

   1、可以直接使用本类类名(或者其他类名)调用方法

   2、可以使用self

类方法不能调用自身,防止死循环

  

在类方法中调用对象方法注意:

1、对象作为方法的参数传递过来

2、可以创建一个对象

 

self与super关键字介绍

**self**

    self是个指针, 指向调用它的变量 (可能是类, 也可能是对象)。

    self用在方法当中代表方法调用者, 谁调用这个方法, self就代表谁

self在对象方法中应用

   在对象方法中使用其指代的是访问当前方法的对象

   - (void) run

{

        NSLog(@"人在吃!");

}

- (void) eat

{

        [self run];      // 使用self调用其它对象方法

        NSLog(@"人在跑");

}

self在类方法中应用

   在类方法中使用其指代的是当前类。不能调用对象方法, 因为self代表调用该方法的类。

   + (void) run

{

        NSLog(@"人在吃!");

}

+(void) eat

{

        [self run];      // 使用self调用其它类方法

        NSLog(@"人在跑");

}

 

**self**

函数内部怎样定义和全局变量同名的变量:

self->变量名=局部变量名

访问的是类的实例变量

**super**

    发送消息可以将方法实现分发其父类。可以重写一个已有的方法来修改获奖它添加到现有方法中,仍然可以将原始的方法纳入到修改后的方法中

------- android培训IOS培训、期待与您交流! ----------

原文地址:https://www.cnblogs.com/gaozp/p/4907197.html