objective-c - 消息转发链

标签 objective-c runtime message-forwarding

我读过 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 都包含一个“响应者”类(分别为 NSResponderUIResponder),它们创建从“第一响应者”开始的对象“链”。响应者将他们没有实现的消息传递给链中的下一个响应者。例如,Cocoa 中的菜单命令通常会将它们的操作消息发送给第一响应者,这可能类似于文本字段或其他 UI 元素。如果该对象不处理该操作,它会将其传递给下一个响应者,依此类推,直到消息被某个对象处理,或者它到达链的末端(应用程序对象)。

关于objective-c - 消息转发链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21981823/

相关文章:

objective-c - 堆栈跟踪中的 __forwarding__ 是什么意思?

objective-c - forwardingTargetForSelector : work? 怎么办

iOS 7 在框架更改后呈现 navcontroller 导航栏高度 64px

iphone - 为什么这段代码运行缓慢?

ios - 确定 iPhone 是否真正连接到互联网或仅在受限热点之后

compilation - "failwith"不再被允许?

objective-c - 创建一个使用相同接口(interface)包装另一个对象的 Objective-C 对象 - KVC/KVO 问题

iPhone SDK : UIWebView to stop images from loading/downloading

java - 在 Windows 上克隆 java 应用程序

c++ - 是否可以在 C++ 运行时动态创建函数?