varias superponer studio lineas graficos graficas objective-c method-signature

objective-c - studio - superponer graficas en r



¿Es posible pasar un método como argumento en Objective-C? (3)

NSInvocation es una clase para completar un método llamado en un objeto. Puede establecer un selector (firma de método), establecer argumentos por índice. A continuación, puede establecer un destino e invocación de llamada para activar la llamada, o dejar el objetivo sin configurar y usar invokeWithTarget: en un bucle de algún tipo para llamar esto a muchos objetos.

Creo que funciona un poco como esto:

NSInvocation *inv = [[NSInvocation alloc] init]; [inv setSelector:@selector(foo:bar:)]; [inv setArgument:123 atIndex:0]; [inv setArgument:456 atIndex:1]; for (MyClass *myObj in myObjects) { [inv invokeWithTarget:myObj]; }

O si no desea pasar objetos de invocación a este método, puede usar el tipo SEL para aceptar un selector (firma de método).

-(void)fooWithMethod:(SEL)selector;

A continuación, asigne el selector a un objeto de invocación para llamarlo a los objetos.

Tengo un método que varía por una sola llamada al método en el interior, y me gustaría pasar el método / firma del método que varía como argumento ... ¿es posible esto en el Objetivo C o es demasiado para esperar? ¿para?


Como se dijo antes, puede pasar el selector del método que desea llamar. Usando un selector hay diferentes maneras de llamar realmente al método:

  1. utilizando NSObject s performSelector: performSelector:withObject: y performSelector:withObject:withObject: methods
  2. utilizando un objeto NSInvocation
  3. o directamente usando objc_msgSend u objc_msgSend_stret
  4. usando el IMP de ese método que puedes obtener usando methodForSelector:

Cuál usar realmente depende de la situación. Si el rendimiento no es crítico, seguiré con 1 si necesitas pasar 0, 1 o 2 objetos. Si los métodos performSelector:... no coinciden, iría con 2 o 3. Dado que configurar un objeto NSInvocation requiere mucho código repetitivo, prefiero 3, pero supongo que es una cuestión de elección personal, a menos que haya problemas de desempeño.

Si el rendimiento de esas llamadas al método importa, usaría 3 o 4. 3 debería ser más rápido a menos que pueda almacenar en caché los IMP . Pero dependiendo de su código esto puede no ser factible o realmente no ayuda. Entonces aquí debe perfilar el código y ver cuál es mejor para usted.


O si está utilizando el fooWithMethod:(SEL)selector , simplemente haga [myObject performSelector:selector] en él, si no tiene otros argumentos.

Ver NSObject para más detalles .