MST

星途 面试题库

面试题:Objective-C动态绑定如何影响方法的调用和重写

结合Objective-C的动态绑定特性,说明在类继承体系下,方法调用过程中动态绑定是怎样起作用的,以及子类重写父类方法时动态绑定的表现和原理。
10.9万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

动态绑定在类继承体系下方法调用过程中的作用

  1. 动态绑定基本概念:在Objective-C中,动态绑定是指在运行时才确定调用哪个对象的方法,而不是在编译时。这是通过消息传递机制实现的。
  2. 类继承体系下方法调用流程:当向一个对象发送消息(即调用方法)时,首先会在对象所属类的方法列表中查找方法实现。如果在该类中未找到,会沿着继承体系向父类的方法列表中查找。这个过程中,动态绑定使得对象可以在运行时根据实际类型来确定执行哪个方法实现,而不是根据编译时的类型。例如,假设有一个父类Animal和子类Dog继承自Animal,如果有一个Animal类型的变量实际上指向一个Dog对象,当调用run方法时,若Dog类重写了run方法,就会调用Dog类中的run方法实现,这就是动态绑定在起作用。

子类重写父类方法时动态绑定的表现和原理

  1. 表现:当子类重写父类方法后,向子类对象发送该方法消息时,会执行子类中重写后的方法,而不是父类的方法。这体现了动态绑定根据对象实际类型来决定执行哪个方法实现的特性。例如,上述AnimalDog类,如果Dog类重写了Animal类的speak方法,当通过Dog对象调用speak方法时,会执行Dog类的speak方法逻辑。
  2. 原理:在Objective-C中,每个对象都有一个isa指针,指向该对象所属的类。类中有一个方法列表,存储了该类实现的方法。当发送消息时,runtime系统会根据对象的isa指针找到对应的类,然后在类的方法列表中查找方法实现。如果子类重写了父类方法,子类的方法列表中会有该重写方法的入口,因此在查找时会优先找到子类的方法实现并执行,从而实现动态绑定下子类重写方法的正确调用。