MST

星途 面试题库

面试题:Objective-C消息转发机制的基本流程是什么

请简述Objective-C中消息转发机制在运行时,当向一个对象发送它无法识别的消息时,依次经历哪些主要步骤。
30.6万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 动态方法解析
    • 首先,运行时系统会调用+ (BOOL)resolveInstanceMethod:(SEL)sel(针对实例方法)或+ (BOOL)resolveClassMethod:(SEL)sel(针对类方法)。
    • 在这个方法中,类可以动态添加方法实现。如果成功添加,消息转发就会正常进行,找到新添加的方法实现并执行。
  2. 备用接收者
    • 如果动态方法解析没有处理该消息,运行时会调用- (id)forwardingTargetForSelector:(SEL)aSelector
    • 这个方法允许对象返回另一个对象来处理这个消息。如果返回了一个非nil对象,那么这个对象就会成为新的消息接收者来处理该消息。
  3. 完整转发
    • 如果备用接收者也没有处理该消息,运行时会进入完整转发阶段。
    • 首先调用- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector,这个方法需要返回一个NSMethodSignature对象,描述该消息的方法签名。如果返回nil,则会调用- (void)doesNotRecognizeSelector:(SEL)aSelector抛出异常。
    • 若成功返回NSMethodSignature,则接着调用- (void)forwardInvocation:(NSInvocation *)anInvocation,在这个方法中,可以将消息转发给其他对象处理,通过修改NSInvocation对象来指定新的目标对象并执行消息。