5

¿Hay alguna manera de averiguar, en tiempo de ejecución, si un método dado es de tipo variable? Algo así como method_getTypeEncoding(); eso no me dirá si un método acepta una cantidad variable de argumentos. ¿O tal vez hay un truco para decirlo?Determinar si un método de Objective-C es variadic durante el tiempo de ejecución

+1

¿Puede explicarnos un poco más en qué contexto desea esta información? No estoy seguro de cómo encontrar eso exactamente en tiempo de ejecución, pero tampoco me ha faltado crear muchos métodos variados. Básicamente, a lo que me refiero es que no necesitas saberlo y que hay un problema mayor. Quizás, pero siempre podría estar equivocado :) –

+0

¿Qué sucede cuando llamas 'method_getNumberOfArguments()' en un método verídico? Nunca lo intenté, pero tal vez devuelva un valor especial (como -1 o algo así)? Ver también 'method_copyArgumentType()'. – user1118321

+1

@ user1118321 'method_getNumberOfArguments' devuelve conteo mínimo, como si fuera un método normal. –

Respuesta

6

El comentario de Robert es correcto. Considere:

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

Correr strings en el binario resultante produce (también había la acción main()):

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

Si cambio el método variadic para ser declarado como - (void)variadicMethodWithIDSentinel:(int)a, ..., la salida strings se convierte en:

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

Así que no, no hay forma de saberlo.

Cuestiones relacionadas