黑马程序员——类方法
黑马程序员——类方法
****类方法优点****
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**
发送消息可以将方法实现分发其父类。可以重写一个已有的方法来修改获奖它添加到现有方法中,仍然可以将原始的方法纳入到修改后的方法中