我读过 Apple 的 message forwarding document和其他文章,似乎 ObjC 运行时会自动转发对象无法识别的消息,如果没有匹配的选择器,它会抛出“无法识别的选择器发送到实例”错误。
但是我有两个问题我无法解释。
- runtime如何找到下一个消息转发对象?
- 谁能解释一下 ObjC 消息转发链?
最佳答案
and it seems the ObjC runtime will forward unrecognized messages for an object automatically
你误会了。运行时没有找到“下一个”对象,它调用同一个对象的forwardInvocation:
方法。如果您希望某个对象将某些消息转发给其他对象(例如委托(delegate)),则可以在您的类中实现该方法。
Can anyone explain the ObjC message forwarding chain?
您可能会混淆消息转发和响应链。两者没有关系。 Cocoa 和 Cocoa Touch 都包含一个“响应者”类(分别为 NSResponder
和 UIResponder
),它们创建从“第一响应者”开始的对象“链”。响应者将他们没有实现的消息传递给链中的下一个响应者。例如,Cocoa 中的菜单命令通常会将它们的操作消息发送给第一响应者,这可能类似于文本字段或其他 UI 元素。如果该对象不处理该操作,它会将其传递给下一个响应者,依此类推,直到消息被某个对象处理,或者它到达链的末端(应用程序对象)。
关于objective-c - 消息转发链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21981823/