关于class superClass super

2017-02-15  本文已影响15人  Cz1024

下面一道面试题:
@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);

上一篇下一篇

猜你喜欢

热点阅读