5

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

+1

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 :) –

+0

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

+1

@ user1118321 'method_getNumberOfArguments' zwraca minimalną liczbę, tak jakby była to normalna metoda. –

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ć.

Powiązane problemy