self
self时一个指针,它指向方法调用者。两种情况:
1 当self出现在对象方法里,那么它就是指向对象的,用它来调用的方法只能是对象方法。简单说明以下
- (void)run
{
[self eat]; //写在对象方法里,它调用的eat方法就是对象方法
}
在这种情况里,还有一种小情况就是用来在对象方法中访问成员变量self->_weight
2 当self出现在类方法里。那它就是指向类的,用它来调用的就是类方法。
+ (void)run
{
[self eat]; //写在类方法里,它调用的eat就是类方法,对比情况1
}
super
suoer也是一个指针,super一定是在有继承时使用,super所指的就是父类。
使用场合:子类重写父类的方法,但是仍保留父类方法中的一些行为
super的具体使用类似于self
程序演示:
#import <Foundation/Foundation.h>
//父类 zombie
@interface Zombie : NSObject
- (void)walk;
@end
@implementation Zombie
- (void)walk
{
NSLog(@"往前走一步");
}
@end
//子类 JumpZombie
@interface JumpZombie : Zombie
@end
@implementation JumpZombie
//重写父类方法
- (void)walk
{
NSLog(@"往前跳一步");
//调用父类的walk方法
//注意调用的是父类的类方法还是对象方法,类似与self的判断
//即取决于super所处的环境,是在类方法里还是对象方法里
[super walk];//此处调用对象方法
}
@end
int main()
{
JumpZombie *jz = [JumpZombie new];
[jz walk];
return 0;
} |
|