Skip to content

Latest commit

 

History

History
98 lines (77 loc) · 12.2 KB

NSInvocation.md

File metadata and controls

98 lines (77 loc) · 12.2 KB

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

    • Arguments not retained by default
    • Use retainArguments for object arguments
    • Return values not retained by default
    • Clean up retained values properly
  2. Argument Indexing

    • Index 0 is self (target)
    • Index 1 is _cmd (selector)
    • User arguments start at index 2
  3. MetaABI Support

    • Supports mulle-objc MetaABI
    • Efficient parameter passing
    • Frame-based invocation
  4. Thread Safety

    • Not thread-safe by default
    • Synchronize access when shared
    • Consider thread affinity
  5. Performance

    • More overhead than direct calls
    • Cache invocations when possible
    • Use for dynamic dispatch needs