Czy istnieje sposób, aby dowiedzieć się - przy starcie - czy dana metoda jest o zmiennej liczbie argumentów typu? Coś takiego jak method_getTypeEncoding()
; to nie powie mi, czy metoda akceptuje zmienną liczbę argumentów. A może jest jakaś sztuczka, żeby to powiedzieć?Ustalenie, czy metoda Objective-C jest o zmiennej liczbie argumentów podczas wykonywania
5
A
Odpowiedz
6
komentarz Roberta jest poprawna. Rozważmy:
@interface Boogity
@end
@implementation Boogity
- (void)methodWithOneIntArg:(int)a {;}
- (void)variadicMethodWithIDSentinel:(id)a, ... {;}
@end
Running strings
na wynikowy plik binarny produkuje (był tam także stado main()
):
strings asdfasdfasdf
Boogity
methodWithOneIntArg:
variadicMethodWithIDSentinel:
[email protected]:8i16
[email protected]:[email protected]
Hello, World!
Gdybym zmienić metodę zmiennej liczbie argumentów należy uznać jako - (void)variadicMethodWithIDSentinel:(int)a, ...
wyjście strings
staje:
Boogity
methodWithOneIntArg:
variadicMethodWithIDSentinel:
[email protected]:8i16
Hello, World!
Tak, nie, nie sposób powiedzieć.
można wyjaśnić trochę więcej co kontekst że chcesz tę informację? Nie jestem pewien, jak dokładnie to znaleźć w czasie wykonywania, ale ja również nigdy nie potrzebowałem budować wielu metod variadycznych. Zasadniczo, do czego dążę, być może nie musisz wiedzieć i istnieje większy problem. Być może, ale zawsze mogę się mylić zbyt :) –
Co stanie się, gdy wywołasz 'method_getNumberOfArguments()' na metodzie veridic? Nigdy go nie wypróbowałem, ale może zwraca specjalną wartość (jak -1 lub coś podobnego)? Zobacz także 'method_copyArgumentType()'. – user1118321
@ user1118321 'method_getNumberOfArguments' zwraca minimalną liczbę, tak jakby była to normalna metoda. –