[self class] 和 [super class]
阿新 • • 發佈:2018-12-11
參考部落格: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