【发布时间】:2011-07-31 23:09:02
【问题描述】:
我不明白为什么我们必须在 NSInvocation 对象上调用 setSelector 方法,而该信息已经通过 invocationWithMethodSignature 传递。
要创建NSInvocation 对象,我们执行以下操作:
SEL someSelector;
NSMethodSignature *signature;
NSInvocation *invocation;
someSelector = @selector(sayHelloWithString:);
//Here we use the selector to create the signature
signature = [SomeObject instanceMethodSignatureForSelector:someSelector];
invocation = [NSInvocation invocationWithMethodSignature:signature];
//Here, we again set the same selector
[invocation setSelector:someSelector];
[invocation setTarget:someObjectInstance];
[invocation setArgument:@"Loving C" atIndex:2];
请注意,我们将选择器传递给 [SomeObject instanceMethodSignatureForSelector: someSelector]; 并再次传递给 [invocation setSelector:someSelector];。
我有什么遗漏吗?
【问题讨论】:
-
+1 - 很高兴在这里看到一个尚未被问(和回答)一百万次的问题,并且不是用难以理解的即时消息行话写的。 :-)
-
一个小点:
signature = [SomeObject instanceMethodSignatureForSelector:someSelector];应该是signature = [[SomeObject class] instanceMethodSignatureForSelector:someSelector]; or signature = [SomeObject methodSignatureForSelector:someSelector];
标签: objective-c dynamic methods language-design nsinvocation