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二:PersonSelf.m實現文件@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 // // 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