iOS面试题:_objc_msgForward 函数是做什么的?直接调用会发生什么问题?

当对象没有实现某个方法 ,会调用这个函数进行方法转发。
(某方法对应的IMP没找到,会返回这个函数的IMP去执行)

  • 1.调用resolveInstanceMethod:方法,允许用户在此时为该Class动态添加实现。如果有实现了,则调用并返回。如果仍没实现,继续下面的动作。

  • 2.调用forwardingTargetForSelector:方法,尝试找到一个能响应该消息的对象。如果获取到,则直接转发给它。如果返回了nil,继续下面的动作。

  • 3.调用methodSignatureForSelector:方法,尝试获得一个方法签名。如果获取不到,则直接调用doesNotRecognizeSelector抛出异常。

  • 4.调用forwardInvocation:方法,将地3步获取到的方法签名包装成Invocation传入,如何处理就在这里面了。

如果直接调用这个方法,就算实现了想调用的方法,也不会被调用,会直接走消息转发步骤。


更多:iOS面试题 答案合集

推荐阅读更多精彩内容