performSelector: withObject:参数为基

2020-06-24  本文已影响0人  summer_code

performSelector: withObject:基本用法

[self performSelector:@selector(test)];
[self performSelector:@selector(test:) withObject:@"测试"];
[self performSelector:@selector(test:) withObject:@"测试" afterDelay:1.0];

当调用的方法参数为基本数据类型时,如:

-(void)test:(NSInteger)count
这个时候如果你这样调用的话的不会成功的
NSNumber *num = [NSNumber numberWithInt:2];
[self performSelector:@selector(test:) withObject:num];
//或
[self performSelector:@selector(test:) withObject:@2];
控制台打印结果:
------收到传递的值为:-7964262576567589500
有木有发现你传的是int 2,收到的是负数,封装成NSNumber对象也不行

那么我们到底要怎么做才能通过调用performSelector: withObject:实现基本数据类型传递呢?

我们先看看系统提供的NSInvocation类


image.png

SEL aSelector = NSSelectorFromString(@"test:");
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:aSelector]];

@property SEL selector;
将反射后的SEL设置给inv
[inv setSelector:aSelector];

NSInteger paramType = 10;
[inv setArgument:&(paramType) atIndex:2];

------收到传递的值为:10

上一篇 下一篇

猜你喜欢

热点阅读