5

Gibt es eine Möglichkeit, zur Laufzeit herauszufinden, ob eine gegebene Methode vom variadischen Typ ist? Etwas wie method_getTypeEncoding(); Das sagt mir nicht, ob eine Methode eine variable Anzahl von Argumenten akzeptiert. Oder gibt es vielleicht einen Trick zu sagen?Ermitteln, ob eine Objective-C-Methode zur Laufzeit variad ist

+1

Können Sie etwas mehr erklären, in welchem ​​Kontext Sie diese Informationen möchten? Ich bin mir nicht sicher, wie genau ich das zur Laufzeit finde, aber ich habe auch nie viele variadische Methoden entwickelt. Im Grunde genommen, was ich verstehe, ist vielleicht, dass du es nicht wissen musst und es ein größeres Problem gibt. Vielleicht könnte ich aber auch immer falsch liegen :) –

+0

Was passiert, wenn Sie 'method_getNumberOfArguments()' auf einer veridischen Methode aufrufen? Ich habe es nie ausprobiert, aber vielleicht gibt es einen speziellen Wert (wie -1 oder etwas) zurück? Siehe auch 'method_copyArgumentType()'. – user1118321

+1

@ user1118321 'method_getNumberOfArguments' gibt eine minimale Anzahl zurück, als ob es eine normale Methode wäre. –

Antwort

6

Roberts Kommentar ist korrekt. Bedenken Sie:

@interface Boogity 
@end 
@implementation Boogity 
- (void)methodWithOneIntArg:(int)a {;} 
- (void)variadicMethodWithIDSentinel:(id)a, ... {;} 
@end 

Lauf strings auf der resultierende Binärdatei erzeugt (es gab auch die Aktie main()):

strings asdfasdfasdf 
Boogity 
methodWithOneIntArg: 
variadicMethodWithIDSentinel: 
[email protected]:8i16 
[email protected]:[email protected] 
Hello, World! 

Wenn ich die variadische Methode ändern, wie - (void)variadicMethodWithIDSentinel:(int)a, ... deklariert werden, die strings Ausgang wird:

Boogity 
methodWithOneIntArg: 
variadicMethodWithIDSentinel: 
[email protected]:8i16 
Hello, World! 

Also, nein, keine Möglichkeit zu sagen.