OC中提供了两个保留字self和super,用于在方法定义中引用执行该方法的对象,相当于Java,C++中的this
self的应用场景
1)应用于类方法
2)在对象方法中
3)访问成员变量
4)self在OC内存管理中应用
// [self在对象方法中的使用]
person *p = [person new];
[p run];
[p eat:@"XX"];
// 如果让他吃完自己执行走的话?
[看person.m]
// 类方法中
NSLog(@"test类方法测试地址 %p",[p class]);
[person test];
self使用方法总结
[谁调用,就是谁]
对象方法中self指代当前对象
类方法 中self指代当前类
self的注意事项
同时有对象方法和类方法存在的时候,self不会调用错误
[这里Person.h就省略了,重点在Person.m上]
——————————————————————
person.m
——————————————————————
@implementation person
-(void)run{
NSLog(@"人在狂奔");
}
-(void)eat:(NSString *)foodname{
NSLog(@"人在吃%@",foodname);
// 吃完就走
[self run];//用self就好
}
+(void)test{
NSLog(@"类方法的测试信息!");
NSLog(@"此时的self = %p",self);
[self selftest];
}
+(void)selftest{
NSLog(@"请用self调用!");
}
@end
————————————————————————————————————
super关键字部分
————————————————————————————————————
这里讲解super的用法,person类中有eat和run两个方法
bla为person下属子类,有个不一样的run方法
*/
person *p = [person new];
[p run];//执行person中的run
bla *b = [bla new];
[b run];//执行bla中的run
// 现在我需要在子类中执行一下父类的方法
// 也就是用b对象执行person类中的run,那么就需要在子类方法中调用父类的run
// 在子类中写出的super关键字意思就是调用其父类的同名方法,例如person中的
// run在bla中就需要用[super run]来调用,此处super指代的就是父类对象
——————
bla.m
——————
@implementation bla
-(void)run{
NSLog(@"人在一边叨逼叨一边跑");
NSLog(@"下面是父类方法的调用");
[super run];//注意这里,使用super调用run,以及,bla是person的子类!这是关键点|执行程序的时候会得到两个输出信息,一个是bla中的run方法,另一个是由[super run]调用的person中的run方法
}
@end