答案 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
。