They all exist because they all serve different purposes. In short:
NSInvocation
An abstract message is sent to one object with optional parameters represented as an object. It is not used very often, especially since the introduction of blocks.
It can also be used as a convenient way to avoid subclassing NSOperation (see NSIvocationOperation ).
NSNotificationCenter
Send a message to any number of unknown "listeners". One to many. The compiler should not know about the listeners. Includes a user information dictionary for additional information. The heaviest / slowest of the lot - often not required, but often visible for convenience.
In most cases, delegates are sufficient substitutes.
delegation methods
This is usually an abstract object that usually accepts a specific protocol. One to one relationship. A common tool for handling an action, not a subclass.
or any other methods that I donโt know about
Blocks (^) can also be used as callbacks / handlers and often as a more typical replacement for NSInvocations.
source share