以下代码按预期工作:
NSLog(@"%@", [NSString stringWithString:@"test"]; // Logs "test"但是当我用NSInvocation替换它时,我得到了一个完全不同的结果:
Class class = [NSString class];
SEL selector = @selector(stringWithString:);
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
[class methodSignatureForSelector:selector]];
[invocation setTarget:class];
[invocation setSelector:selector];
[invocation setArgument:@"test" atIndex:2];
[invocation invoke];
id returnValue = nil;
[invocation getReturnValue:&returnValue];
NSLog(@"%@", returnValue); // Logs "NSCFString"我上上下下找过了,但还是想不出。有什么帮助吗?谢谢!
发布于 2011-03-08 03:45:35
从NSInvocation类引用:
当参数值为对象时,传递一个指向应从中复制对象的变量(或内存)的指针:
NSArray *anArray;
[invocation setArgument:&anArray atIndex:3];由于@“NSString”实际上是在构造测试实例,因此您应该使用
NSString *testString = @"test";
[invocation setArgument:&testString atIndex:2];https://stackoverflow.com/questions/5224265
复制相似问题