請寫出程序輸出結(jié)果:
@implementation Son : Father
- (id)init {
self = [super init];
if (self) {
NSLog(@"%@", NSStringFromClass([self class]));
NSLog(@"%@", NSStringFromClass([super class]));
}
return self;
}
@end
結(jié)果: Son, Son
解析:此題主要考察對self和super的理解
首先看下objc_super這個結(jié)構(gòu)體铜邮,下面會用到:
struct objc_super {
id receiver;
Class superClass;
};
該結(jié)構(gòu)體擁有兩個成員變量:receiver-->子類對象和superClass-->父類君仆。
在本例中牲距,super是一個編譯器符號返咱,當(dāng)編譯器遇到[super init]時會構(gòu) 建 objc_super 的結(jié)構(gòu)體牍鞠,receiver則表示Son類中的實(shí)例對象,和self相同咖摹,superClass 表示Father 难述,[super init]即表示找到Father 中的init方法萤晴,用Son類的實(shí)例對象self調(diào)用此方法;self是當(dāng)前類的一個實(shí)例對象店读,self和super指向的都是同一個對象嗦枢,區(qū)別是查找方法的位置不同,self表示從當(dāng)前類查找方法屯断,super表示從父類中查找方法,所以輸出[self class]和[super class]時都會是Son類