class superClass superについて

1234 ワード

次の面接問題:@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を印刷する.
ここでは、任意の方法のデフォルトに2つの暗黙的なパラメータ(id self,SEL_cmd)があるというもう一つの知識点にも関連する.