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
5
A
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.
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 :) –
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
@ user1118321 'method_getNumberOfArguments' gibt eine minimale Anzahl zurück, als ob es eine normale Methode wäre. –