關于class superClass super

下面一道面試題:
@implementation Son : Father

- (id)init 
{ 
self = [super init]; 
if (self) { 
NSLog(@”%@”, NSStringFromClass([self class])); 
NSLog(@”%@”, NSStringFromClass([super class])); 
} 
return self; 
} 
@end 

很多iOS面試題庫中都有這一道面試題,上面的結果為Son Son .

這里我就小記一下 class superClass super 各代表什么意思?

class:這里代表當前方法調用者的類
superClass:這里代表當前方法調用者的父類
super:只是一個編譯器指示符,只要編譯器看到super這個標識,就會讓當前對象去調用父類的方法,本質還是當前對象,所以[super class]輸出的結果為Son。

下面是一個demo

@interface Father : NSObject
-(void)test;
@end

@implementation Father

-(void)test {
    
    NSLog(@"%@,%@",[self class],[super class]);
    
    //輸出結果:Son,Son

}

@end

下面是Son的實現方法
@implementation Son
-(void)test {
    [super test];
}



ViewController

#import "ViewController.h"
#import "Son.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [[[SubPerson alloc] init] test];
}

可以看到輸出結果也為Son,Son ,上面說了super只是一個編譯器指示符,雖然在父類Father中輸出打印,但是是子類Son調用的父類方法,所以[self class] ,[super class] 依然打印Son,Son。

這里還涉及另外一個知識點,就是任何方法默認都有兩個隱式參數(id self, SEL _cmd);

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容