我們都知道:self 是類的隱藏參數(shù)兔魂,指向當前調用方法的這個類的實例栈妆。那 super 呢扛吞?
很多人會想當然的認為“ super 和 self 類似初肉,應該是指向父類的指針吧酷鸦!這是很普遍的一個誤區(qū)。其實 super 是一個 Magic Keyword牙咏, 它本質是一個編譯器標示符臼隔,和 self 是指向的同一個消息接受者!他們兩個的不同點在于:super 會告訴編譯器眠寿,調用 class 這個方法時躬翁,要去父類的方法,而不是本類里的盯拱。
舉個栗子:
下面的代碼輸出什么盒发?
@implementation Son : Father
- (id)init {
self = [super init];
if (self) {
NSLog(@"%@", NSStringFromClass([self class]));
NSLog(@"%@", NSStringFromClass([super class]));
}
return self;
}
@end
答案:
都輸出 Son
NSStringFromClass([self class]) = Son
NSStringFromClass([super class]) = Son