Message Forwarding in Objective C

我只是一个虾纸丫 提交于 2019-12-01 20:10:19

Simple delegation pattern: your object responds to the message aMethod, then it check if some other object responds to the message aMethod by sending [otherObject respondsToSelector:@selector(aMethod)], which returns a bool. If otherObject does, you're all clear to send the message.

More technical goodness NSInvocation method: if your object is sent a message it can't respond to (crazyMethodName), then forwardInvocation is called on your object. The default implementation of forwardInvocation for NSObject just calls doesNotRecognizeSelector because, well, your object doesn't recognize the selector. You can override the default implementation of forwardInvocation by checking if another object responds to the selector of the invocation, and invoking that invocation on the other object if so.

A common use of message forwarding is to make a class act as a proxy for other classes: you send a message to an instance of this NSProxy subclass, and it dispatches it to whichever class or object it deems fit.

Message forwarding really just allows a class to receive messages that it was not designed to accept: you can even use it to dynamically create methods on the fly. An application of this would be a NSManagedObject category that let you access Core Data properties in method calls, without writing custom NSManagedObject subclasses for every entity. This sort of reminds me of method_missing in Ruby.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!