面试题答案
一键面试动态绑定在类继承体系下方法调用过程中的作用
- 动态绑定基本概念:在Objective-C中,动态绑定是指在运行时才确定调用哪个对象的方法,而不是在编译时。这是通过消息传递机制实现的。
- 类继承体系下方法调用流程:当向一个对象发送消息(即调用方法)时,首先会在对象所属类的方法列表中查找方法实现。如果在该类中未找到,会沿着继承体系向父类的方法列表中查找。这个过程中,动态绑定使得对象可以在运行时根据实际类型来确定执行哪个方法实现,而不是根据编译时的类型。例如,假设有一个父类
Animal
和子类Dog
继承自Animal
,如果有一个Animal
类型的变量实际上指向一个Dog
对象,当调用run
方法时,若Dog
类重写了run
方法,就会调用Dog
类中的run
方法实现,这就是动态绑定在起作用。
子类重写父类方法时动态绑定的表现和原理
- 表现:当子类重写父类方法后,向子类对象发送该方法消息时,会执行子类中重写后的方法,而不是父类的方法。这体现了动态绑定根据对象实际类型来决定执行哪个方法实现的特性。例如,上述
Animal
和Dog
类,如果Dog
类重写了Animal
类的speak
方法,当通过Dog
对象调用speak
方法时,会执行Dog
类的speak
方法逻辑。 - 原理:在Objective-C中,每个对象都有一个
isa
指针,指向该对象所属的类。类中有一个方法列表,存储了该类实现的方法。当发送消息时,runtime系统会根据对象的isa
指针找到对应的类,然后在类的方法列表中查找方法实现。如果子类重写了父类方法,子类的方法列表中会有该重写方法的入口,因此在查找时会优先找到子类的方法实现并执行,从而实现动态绑定下子类重写方法的正确调用。