1:self是类的隐藏的参数,指向当前调用方法的类,另一个隐藏参数是_cmd,代表当前类方法的selector。
2:super并不是隐藏的参数,它只是一个"编译器指示符",它和self指向的是相同的消息接受者
3:当使用self调用方法时,会从当前类的方法列表中开始寻找,如果没有,就从父类中再找,而使用super时,则从父类的方法列表中开始找,然后调用父类的这个方法
具体看代码实现方法(详细看代码中的注释)
一:看PersonSelf.h声明文件
// // PersonSelf.h // PersonSelf // // Created by hmjiangqq on 14-1-22. // Copyright (c) 2014年 hmjiangqq. All rights reserved. // #import <Foundation/Foundation.h> @class Student; //@class一般用在头文件中 @interface PersonSelf : NSObject { //声明两个实例变量 int age; NSString * name; Student *s; } //定义方法 -(NSString *) getName; -(void) setName:(NSString *)_name; -(int) getAge; -(void)setAge:(int)_age; @end
二:PersonSelf.m实现文件
// // PersonSelf.m // PersonSelf // // Created by hmjiangqq on 14-1-22. // Copyright (c) 2014年 hmjiangqq. All rights reserved. // #import "PersonSelf.h" #import "Student.h" //#import一般使用在实现文件中 @implementation PersonSelf -(id)init{ if(self=[super init]){ //super可以调用父类中的方法 s=[[Student alloc]init]; NSLog(@"student:%@\n",s); } return self; } -(NSString *) getName{ return name; } -(void) setName:(NSString *)_name{ name=_name; [self setAge:14];//self可以去调用本类对象中的方法 NSLog(@"setAge"); NSLog(@"self class is: %@\n",[self class]); NSLog(@"super class is: %@\n",[super superclass]); } -(int) getAge{ return age; } -(void)setAge:(int)_age{ age=_age; } @end