在 iOS中可以直接调用 某个对象的消息 方式有2种
一种是performSelector:withObject:
再一种就是NSInvocation
第一种方式比较简单,能完成简单的调用。但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定。那么在这种情况下,我们就可以使用NSInvocation来进行这些相对复杂的操作
NSInvocation可以处理参数、返回值。会java的人都知道反射操作,其实NSInvocation就相当于反射操作。
//调用
id bird = [[LOCBird alloc] init];
NSLog(@"len= %d", [bird length]);// len= 13
使用二:定时调用
SEL selector = @selector(myMethod:withParam2:);
NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:selector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setSelector:selector];
NSString *str1 = @"someString";
NSString *str2 = @"someOtherString";
//The invocation object must retain its arguments
//Set the arguments
[invocation setTarget:self];
[invocation setArgument:&str1 atIndex:2];//参数位置 atIndex的下标必须从2开始。原因为:0 1 两个参数已经被target 和selector占用
[invocation setArgument:&str2 atIndex:3];
[NSTimer scheduledTimerWithTimeInterval:3.0 invocation:invocation repeats:YES];
-(NSString *)myMethod:(NSString *)param1 withParam2:(NSNumber *)param2
{
NSString *result = @"objc";
NSLog(@"par = %@",param1);
NSLog(@"par 2 = %@",param2);
return result;
}
每3秒输出:
par = someString
par 2 = someOtherString
总结:没感觉到有实质的用途,仅做了解之用