本帖最后由 RIDP 于 2015-9-22 17:48 编辑
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
|