一般解釋如下
// class: 獲取方法調(diào)用者類
// superclass: 獲取方法調(diào)用者 父類
// super:super不是一個指針,super只是編譯指示器
// super: 僅僅是讓方法調(diào)用者去調(diào)用父類方法
這段解釋看起來很簡單,但是實際中很容易用錯,尤其容易混淆的是super的用法.
super實際上是讓某個類自己去調(diào)用父類的方法,而不是父類去調(diào)用某方法;
比如
在名為Person的類.m中
- (void)test{
NSLog(@"%@ %@ %@ %@",[self class], [self superclass], [super class], [super superclass]);
}
在外面調(diào)用
Person *person =[ [Person alloc] init];
[person test];
結(jié)果會是
Person NSObject Person NSObject
原理如下:
[self class]表示person對象調(diào)用class方法得到類名Person,
[self superclass]意味著person對象調(diào)用superclass方法,得到父類類名NSObject,
[super class]表示person對象去調(diào)用父類的class方法,因為是對象方法,person對象得到類名Person,
[super superclass]表示person對象去調(diào)用父類的superclass方法,得到person對象的父類類名NSObject,