目标C中的消息转发

时间:2009-12-16 05:46:41

标签: objective-c message-forwarding

任何人都可以简要说明如何使用邮件转发吗?

链接

  • Apple documentation:Apple文档作为参考文献往往很好,但冗长到不能作为介绍的最佳文档。

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

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