从NSInvocation获取参数值

16

请问如何获取在使用时被拦截的一个不存在的方法所传递的值?

+ (void)forwardInvocation:(NSInvocation *)anInvocation;

+ (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;

假设有一条消息:

[SomeClass doSomething:@"theThing" withSomething:@"aParam"];

我可以轻易地获取方法签名,但是我对如何获取传递的值感到非常困惑。

我是完全错了还是漏掉了什么?

1个回答

36

-[NSInvocation getArgument:atIndex:]

因此,在您的情况下,您将像这样使用它:

__unsafe_unretained NSString * firstArgument = nil;
__unsafe_unretained NSString * secondArgument = nil;
[theInvocation getArgument:&firstArgument atIndex:2];
[theInvocation getArgument:&secondArgument atIndex:3];
NSLog(@"Arguments: %@ and %@", firstArgument, secondArgument);

记住self_cmd是第0个和第1个参数。


5
在ARC下,firstArgument和secondArgument需要被声明为__unsafe_unretained吗? - pshah
@pshah 绝对正确,您的评论解决了我过去几个小时一直在调试的问题。谢谢! - Joshua
@Joshua,我很高兴它有帮助! - pshah
是的 - 您必须使用__unsafe_retained。 - Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接