1. 程式人生 > >[self class] 和 [super class]

[self class] 和 [super class]

 

參考部落格:https://blog.csdn.net/erice_e/article/details/73222616

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

這兩個都打印出來的是:Son.
self 和 super 都是指向當前例項的,[self class] 會先在當前類的方法列表中查詢class這個方法,[super class] 會先到父類中去查詢class方法,兩者在找不到的時候,都會繼續向祖先類查詢class方法,最終到NSObject類。最重要的問題是,我們都沒有在Father和Son類中重寫class這個方法,最終自然都會去執行NSObject中的class方法,結果也自然應該是一樣的。至於為什麼是Son,我們可以看看NSObject中是怎麼實現class的:

- (Class)class {
    return object_getClass(self);
}

返回的都是self的型別,self在這裡是Son,所以輸出結果就是Son。

參考部落格:https://blog.csdn.net/erice_e/article/details/73222616