谁能简要说明如何使用消息转发?
链接
- Apple 文档:Apple 文档往往可以作为参考,但足够长,不能作为最好的介绍。
简单的委托模式:您的对象响应消息 aMethod,然后通过发送 [otherObject respondsToSelector:@selector(aMethod)] 检查是否有其他对象响应消息 aMethod,返回一个布尔值。如果 otherObject 确实如此,那么您就可以发送消息了。
更多技术优点 NSInvocation 方法:如果您的对象发送了一条无法响应的消息(crazyMethodName),则在您的对象上调用 forwardInvocation。NSObject 的 forwardInvocation 的默认实现只调用 doesNotRecognizeSelector ,因为您的对象无法识别选择器。您可以通过检查另一个对象是否响应调用的选择器来覆盖 forwardInvocation 的默认实现,如果是,则在另一个对象上调用该调用。
消息转发的一个常见用途是让一个类充当其他类的代理:您向该NSProxy
子类的一个实例发送一条消息,然后它将它分派给它认为合适的任何类或对象。
消息转发实际上只允许一个类接收它不接受的消息:您甚至可以使用它动态地动态创建方法。一个这样的应用程序将是一个NSManagedObject
类别,它允许您在方法调用中访问 Core Data 属性,而无需NSManagedObject
为每个实体编写自定义子类。这让我想起了method_missing
Ruby。