【发布时间】:2009-12-16 05:46:40
【问题描述】:
【问题讨论】:
-
对于那些投反对票的人来说,我实际上已经阅读了大部分文章 - 只是它作为参考要好得多,而不是对主题的介绍
标签: objective-c message-forwarding
【问题讨论】:
标签: objective-c message-forwarding
简单的委托模式:你的对象响应消息aMethod,然后它检查是否有其他对象通过发送[otherObject respondsToSelector:@selector(aMethod)]来响应消息aMethod,它返回一个bool。如果 otherObject 有,那么您就可以发送消息了。
更多技术优势 NSInvocation 方法:如果您的对象被发送了一条无法响应的消息(crazyMethodName),则在您的对象上调用 forwardInvocation。 NSObject 的 forwardInvocation 的默认实现只调用 doesNotRecognizeSelector ,因为您的对象无法识别选择器。您可以通过检查另一个对象是否响应调用的选择器来覆盖 forwardInvocation 的默认实现,如果是,则在另一个对象上调用该调用。
【讨论】:
消息转发的一个常见用途是让一个类充当其他类的代理:您将消息发送到此NSProxy 子类的实例,然后它将消息分派到它认为合适的任何类或对象。
消息转发实际上只是允许一个类接收它原本不接受的消息:您甚至可以使用它动态地动态创建方法。这方面的一个应用程序是NSManagedObject 类别,它允许您在方法调用中访问Core Data 属性,而无需为每个实体编写自定义NSManagedObject 子类。这让我想起了 Ruby 中的method_missing。
【讨论】: