super关键字被编译器替换成了id objc_msgSendSuper(struct objc_super *super, SEL op, ...),其中objc_super的结构是- struct objc_super
- {
- id receiver;
- Class class;
- };
复制代码
注意到objc_msgSendSuper和id objc_msgSend(id theReceiver, SEL theSelector, ...)的区别,多了一个Class class;
class实际上就指向了找到当前method的class 对象的实例。所以在objc_msgSendSuper中查找方法是从参数class指向的class 实例对象的isa开始查找的,而不是从theReceiver也就是myobj这个对象的isa开始查找的
|
|