2010-10-05 37 views
5

如何檢查選擇器的簽名或者選擇器是否需要參數?檢測選擇器的簽名

E.g.我要檢查選擇是否型
-(void) method

-(void) method:(id)param

+3

請注意,'method'和'method:'被視爲不同的選擇器。 – Yuji 2010-10-05 23:24:17

+3

我必須問,你想做什麼?!? – bbum 2010-10-05 23:40:12

+0

我在寫一個用作測試框架的應用程序。 – Egil 2010-10-06 08:42:03

回答

0

您可以檢查此使用respondsToSelector:,即是這樣的:

if ([myObject respondsToSelector:@selector(doSomethingWithOneArgument:)]){ 
    .... 
} 
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

'[[obj class] instanceMethodSignatureForSelector:selector]'可以寫成'[obj methodSignatureForSelector:selector]' – user102008 2011-07-30 01:24:09