super 調(diào)用 objc_msgSendSuper 告訴系統(tǒng)
去父類方法列表里面去找,但是調(diào)用者主體還是 self
和 self 的區(qū)別只是不在本類 的方法列表中查找
經(jīng)常寫(xiě)的代碼 如下
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
count = 0;
NSLog(@"%@",NSStringFromClass([self class]));
NSLog(@"%@",NSStringFromClass([super class]));
}
return self;
}
super 的含義改衩,消息轉(zhuǎn)發(fā)會(huì)調(diào)用 objc_msgSendSuper
, 就是 去父類的方法列表中找到 initWithFrame:
這個(gè)方法,然后調(diào)用,調(diào)用的主體是 self突那。super
只是一個(gè)編譯器的特殊字符,并不代表父類的一個(gè)實(shí)例化對(duì)象构眯。這也就能明白為什么 調(diào)用 [super initWithFrame:frame]
能得到本類的 實(shí)例化對(duì)象了愕难,而不是父類的對(duì)象了。
[self class]
[super class]
惫霸,class
這個(gè)方法都是 在 NSObject 對(duì)象中找到的猫缭,所以 都相當(dāng)于 調(diào)用 [self class]
, 輸入都是 一樣的 SubView