在将 NSInvocation 与不是对象的参数一起使用时,我遇到了一个问题。我传递的简单整数值被更改为不同的值。
这是我正在调用的方法:
+(NSString*) TestMethod2 :(int32_t) number
{
NSLog(@"*************** %d ******************", number);
return @"success";
}
这就是我所说的:
-(void) TestInvocationUsingReflection
{
id testClass = NSClassFromString(@"TestClass");
NSMethodSignature * methodSignature = [testClass methodSignatureForSelector:@selector(TestMethod2:)];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSignature];
[inv setSelector:@selector(TestMethod2:)];
[inv setTarget:testClass];
NSNumber * arg = [NSNumber numberWithInt:123456];
[inv setArgument:&arg atIndex:2]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
[inv retainArguments];
NSUInteger length = [[inv methodSignature] methodReturnLength];
id result = (void *)malloc(length);
[inv invoke];
[inv getReturnValue:&result];
}
结果是记录的不是我传递的简单的 123456 值,而是这样的:
** * ***180774176** * ** * ***
我做错了什么?
我对 Objective C 很陌生,但是我需要在运行时调用一个我无法控制的方法。它以 int64_t 作为参数类型。
请问有人可以帮忙吗?谢谢....