【问题标题】:Message Forwarding in Objective CObjective C 中的消息转发
【发布时间】:2009-12-16 05:46:40
【问题描述】:

谁能简要说明如何使用消息转发?

链接

  • Apple documentation:Apple 文档作为参考往往很好,但作为介绍,它足够长而不是最好的。

【问题讨论】:

  • 对于那些投反对票的人来说,我实际上已经阅读了大部分文章 - 只是它作为参考要好得多,而不是对主题的介绍

标签: objective-c message-forwarding


【解决方案1】:

简单的委托模式:你的对象响应消息aMethod,然后它检查是否有其他对象通过发送[otherObject respondsToSelector:@selector(aMethod)]来响应消息aMethod,它返回一个bool。如果 otherObject 有,那么您就可以发送消息了。

更多技术优势 NSInvocation 方法:如果您的对象被发送了一条无法响应的消息(crazyMethodName),则在您的对象上调用 forwardInvocation。 NSObject 的 forwardInvocation 的默认实现只调用 doesNotRecognizeSelector ,因为您的对象无法识别选择器。您可以通过检查另一个对象是否响应调用的选择器来覆盖 forwardInvocation 的默认实现,如果是,则在另一个对象上调用该调用。

【讨论】:

    【解决方案2】:

    消息转发的一个常见用途是让一个类充当其他类的代理:您将消息发送到此NSProxy 子类的实例,然后它将消息分派到它认为合适的任何类或对象。

    消息转发实际上只是允许一个类接收它原本不接受的消息:您甚至可以使用它动态地动态创建方法。这方面的一个应用程序是NSManagedObject 类别,它允许您在方法调用中访问Core Data 属性,而无需为每个实体编写自定义NSManagedObject 子类。这让我想起了 Ruby 中的method_missing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-02
      • 2010-09-14
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      相关资源
      最近更新 更多