苹果文档:
An NSInvocation
is an Objective-C message rendered static, that is, it is an action turned into an object. NSInvocation
objects are used to store and forward messages between objects and between applications, primarily by NSTimer
objects and the distributed objects system.
An NSInvocation
object contains all the elements of an Objective-C message: a target, a selector, arguments, and the return value. Each of these elements can be set directly, and the return value is set automatically when the NSInvocation
object is dispatched.
An NSInvocation
object can be repeatedly dispatched to different targets; its arguments can be modified between dispatch for varying results; even its selector can be changed to another with the same method signature (argument and return types). This flexibility makes NSInvocation
useful for repeating messages with many arguments and variations; rather than retyping a slightly different expression for each message, you modify the NSInvocation
object as needed each time before dispatching it to a new target.
NSInvocation
does not support invocations of methods with either variable numbers of arguments or union
arguments. You should use the invocationWithMethodSignature:
class method to create NSInvocation
objects; you should not create these objects using alloc
and init
.
This class does not retain the arguments for the contained invocation by default. If those objects might disappear between the time you create your instance of NSInvocation
and the time you use it, you should explicitly retain the objects yourself or invoke the retainArguments
method to have the invocation object retain them itself.
-
methodSignature
Property -
-
selector
Property -
target
Property -
argumentsRetained
Property -
-
- invokeWithTarget:
简单例子:- (
void
)viewDidLoad {
[super viewDidLoad];
SEL myMethod = @selector(myLog);
//创建一个函数签名,这个签名可以是任意的,但需要注意,签名函数的参数数量要和调用的一致。
NSMethodSignature * sig = [NSNumber instanceMethodSignatureForSelector:@selector(init)];
//通过签名初始化 不能用init/alloc
NSInvocation * invocatin = [NSInvocation invocationWithMethodSignature:sig];
//设置target
[invocatin setTarget:self];
//设置selecteor
[invocatin setSelector:myMethod];
//消息调用
[invocatin invoke];
}
-(
void
)myLog{
NSLog(@
"MyLog"
);
}
-