id a = self->isa;
id b = ((NSObject*)self)->isa;
a 和 b 具有相同的值。
现在给定的 isa 指针是一样的,为什么
[(Animal*)Person speakEnglish];
给出错误?我认为强制转换会改变 isa 指针,因为如果我将子类强制转换为它的父类,我就不能再调用子类的方法了,方法调用搜索是基于 isa 指针的。
我很想知道方法选择器是如何实现的,所以即使是一个实例的指针指向Person,如果我调用实例的Person的方法,我会得到一个错误。