According to Apple's NSInvocation class reference:
NSInvocationis an Objective-C message rendered static, that is, it is an action turned into an object.
And, in a little more detail:
The concept of messages is central to the objective-c philosophy. Any time you call a method, or access a variable of some object, you are sending it a message.
NSInvocation comes in handy when you want to send a message to an object at a different point in time, or send the same message several times.
NSInvocation allows you to describe the message you are going to send, and then invoke it (actually send it to the target object) later on.
For example, let's say you want to add a string to an array. You would normally send the
addObject: message as follows:
Now, let's say you want to use
NSInvocation to send this message at some other point in time:
First, you would prepare an
NSInvocation object for use with
NSMethodSignature * mySignature = [NSMutableArray instanceMethodSignatureForSelector:@selector(addObject:)]; NSInvocation * myInvocation = [NSInvocation invocationWithMethodSignature:mySignature];
Next, you would specify which object to send the message to:
Specify the message you wish to send to that object:
And fill in any arguments for that method:
[myInvocation setArgument:&myString atIndex:2];
At this point,
myInvocation is a complete object, describing a message that can be sent. To actually send the message, you would call:
This final step will cause the message to be sent, essentially executing
Think of it like sending an email. You open up a new email (
NSInvocation object), fill in the address of the person (object) who you want to send it to, type in a message for the recipient (specify a
selector and arguments), and then click "send" (call
See Using NSInvocation for more information.
NSInvocation objects so that it can reverse commands. Essentially, what you are doing is creating an
NSInvocation object to say: "Hey, if you want to undo what I just did, send this message to that object, with these arguments". You give the
NSInvocation object to the
NSUndoManager, and it adds that object to an array of undoable actions. If the user calls "Undo",
NSUndoManager simply looks up the most recent action in the array, and invokes the stored
NSInvocation object to perform the necessary action.
See Registering Undo Operations for more details.