Hil*_*ell 3 objective-c nsinvocation
以下代码按预期工作:
NSLog(@"%@", [NSString stringWithString:@"test"]; // Logs "test"
Run Code Online (Sandbox Code Playgroud)
但当我用一个替换它时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"
Run Code Online (Sandbox Code Playgroud)
我搜索过高低,但无法弄清楚这一点.有帮助吗?谢谢!
从NSInvocation类引用:
当参数值是对象时,将指针传递给应从中复制对象的变量(或内存):
NSArray *anArray;
[invocation setArgument:&anArray atIndex:3];
Run Code Online (Sandbox Code Playgroud)
因为@"test"实际上构建了NSString的一个实例,所以你应该使用
NSString *testString = @"test";
[invocation setArgument:&testString atIndex:2];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1141 次 |
| 最近记录: |