NSInvocation

Encapsulates an Objective-C message (method call) that can be stored and invoked later. Supports variable arguments and MetaABI.

Base Class

NSObject

Instance Variables

NSMethodSignature   *_methodSignature;    // Method type information
char               *_storage;             // Argument storage
char               *_sentinel;            // Storage bounds check
char                _argumentsRetained;   // Arguments retention flag
char                _returnValueRetained; // Return value retention flag

Methods

Creation

Arguments

Target/Selector

Invocation

Return Value

Usage Example

// Create invocation
NSMethodSignature *sig = [target methodSignatureForSelector:@selector(doWork:)];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:sig];
[inv setTarget:target];
[inv setSelector:@selector(doWork:)];

// Set arguments
id arg = @"data";
[inv setArgument:&arg atIndex:2];  // 0=self, 1=_cmd, 2=first arg

// Retain arguments if needed
[inv retainArguments];

// Invoke
[inv invoke];

// Get return value
id result;
[inv getReturnValue:&result];

Important Notes

  1. Memory Management
  2. Argument Indexing
  3. MetaABI Support
  4. Thread Safety
  5. Performance