检测选择器的签名

时间:2010-10-05 23:04:10

标签: objective-c

如何检查选择器的签名,或者选择器是否需要参数?

E.g。我想检查选择器是否为类型
-(void) method

-(void) method:(id)param

2 个答案:

答案 0 :(得分:8)

您可以使用NSMethodSignature类获取有关特定选择器的大量信息:

id obj = ...
SEL selector = ...

NSMethodSignature *signature = [obj methodSignatureForSelector:selector];
NSUInteger args = [signature numberOfArguments];
int i;
for(i = 0; i < args; i++)
   printf("argument type at index %d: %c", i, [signature getArgumentTypeAtIndex:i]);

答案 1 :(得分:0)

您可以使用respondsToSelector:进行检查,例如:

if ( [myObject respondsToSelector:@selector(doSomethingWithOneArgument:)] ){
    ....
}