面试题答案
一键面试resolveInstanceMethod
在Objective-C消息转发流程中的位置及作用
- 位置:在运行时系统接收到一个对象无法响应的消息时,首先进入动态方法解析阶段,
resolveInstanceMethod
是这个阶段针对实例方法的处理方法。在此之前,运行时系统会先在类的方法缓存和方法列表中查找是否有能够响应该消息的方法,若未找到,才进入动态方法解析。 - 作用:它给开发者提供了一个机会,在运行时动态地为类添加实例方法的实现。如果在这个方法中成功添加了方法实现,那么消息转发流程就可以正常执行该方法,而不需要进入后续更复杂的备用接收者或完整的消息转发流程。
在resolveInstanceMethod
中动态添加方法实现后消息转发流程的变化
如果在resolveInstanceMethod
中动态添加了方法实现,后续消息转发流程会发生如下变化:
- 流程终止:消息转发流程直接结束,运行时系统会重新尝试查找并调用刚刚添加的方法实现。原本可能会进入的备用接收者(
forwardingTargetForSelector:
方法)和完整消息转发(methodSignatureForSelector:
和forwardInvocation:
)阶段都不会再执行。因为此时该对象已经能够响应这个消息,就如同该方法一开始就存在于类的方法列表中一样正常执行。