NSInvocaion用来替代performSelector传多个参数时,以及根据函数签名来动态调用时
来源:互联网 发布:万游网络传奇 编辑:程序博客网 时间:2024/05/22 09:02
当我们动态执行某个方法,同时传递三个以上参数时,不能使用performSelector,此时可以使用NSInvocaion,例如下面:
-(void)printNumber:(NSNumber *)num num2:(NSNumber *)num2 num3:(NSNumber *)num3
{
NSLog(@"%@,%@,%@",num,num2,num3);
}
NSMethodSignature *signture = [[self class] instanceMethodSignatureForSelector:@selector(printNumber:num2:num3:)];
NSInvocation *invocaiton = [NSInvocation invocationWithMethodSignature:signture];
[invocaiton setSelector:@selector(printNumber:num2:num3:)];
[invocaiton setTarget:self];
NSNumber *num1 = [NSNumber numberWithInt:53];
NSNumber *num2 = [NSNumber numberWithInt:63];
NSNumber *num3 = [NSNumber numberWithInt:73];
[invocaiton setArgument:&num1 atIndex:2];
[invocaiton setArgument:&num2 atIndex:3];
[invocaiton setArgument:&num3 atIndex:4];
[invocaiton invoke];
动态调用方法时会用到,例子
-(NSString *)myMethod:(NSString *)param1 withParam2:(NSNumber *)param2
{
NSString *result = @"objc";
NSLog(@"par = %@",param1);
NSLog(@"par 2 = %@",param2);
return result;
}
-(void)invokeMyMethodDynamically
{
SEL selector = @selector(myMethod:withParam2:);
NSMethodSignature *methodSignature = [[self class] instanceMethodSignatureForSelector:selector];//获得类和方法的签名
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
//从签名获得调用对象
[invocation setTarget:self];
//设置target
[invocation setSelector:selector];//设置selector
NSString *returnValue = nil;
NSString *argument1 = @"fist";
NSNumber *argument2 = [NSNumber numberWithInt:102];
[invocation setArgument:&argument1 atIndex:2];//设置参数,第一个参数index为2
[invocation setArgument:&argument2 atIndex:3];
[invocation retainArguments];//retain一遍参数
[invocation invoke];//调用
[invocation getReturnValue:&returnValue];//得到返回值,此时不会再调用,只是返回值
NSLog(@"return value = %@",returnValue);
}
转:http://blog.csdn.net/ch_soft/article/details/6967002
- NSInvocaion用来替代performSelector传多个参数时,以及根据函数签名来动态调用时
- 根据函数名动态调用
- 050.performSelector 动态调用方法
- 050.performSelector 动态调用方法
- IOS逆向--performSelector动态调用
- 根据printf函数来讲解可变参数
- oracle 查询语句根据参数值来动态生成条件
- C语言函数调用时参数压栈的顺序以及函数指针的作用
- 用内嵌汇编来解决运行时参数不确定的函数的调用问题
- 用内嵌汇编来解决运行时参数不确定的函数的调用问题
- 调用函数不同参数以及返回值
- 用来动态添加某事件后处理函数 如鼠标单击时可动态添加其它处理函数
- 动态的调用可变参数函数
- 动态的调用可变参数函数
- 动态的调用可变参数函数
- performSelector函数
- DLL导出函数方法以及动态调用
- C语言中用有参数来调用无参数函数
- android上传图片至服务器
- 软件测试面试题及解析(十一)
- 拓扑排序算法
- Codeforces 217A. Ice Skating 搜索
- 开始学习SQLite
- NSInvocaion用来替代performSelector传多个参数时,以及根据函数签名来动态调用时
- android 拍照上传照片(新)
- php中的参数传递问题
- POJ 1436 Horizontally Visible Segments
- MyEclipse如何设置自动提示
- 简单线程池
- Mac OS显示隐藏文件
- ORACLE数据库事务隔离级别
- Linux下eclipse连接真机无法识别问题