tutorial que español iphone objective-c cocoa cocoa-touch uikit

iphone - español - que es uikit ios



¿Cómo obtener el nombre o la firma del método actual en un NSString? (4)

Cada llamada a método también pasa dos argumentos ocultos: un id llamado self y un SEL llamado _cmd . Puede usar NSStringFromSelector para convertir el selector de método en un NSString:

NSStringFromSelector(_cmd);

Ejemplo: Tengo un método -myFooBarMethod:withFoo:bar:moreFoo: y dentro de la implementación de ese método quiero obtener dinámicamente su nombre, como @"-myFooBarMethod:withFoo:bar:moreFoo: en un NSString. -typing de la firma del método.

Siento que esto tiene que hacer algo con los selectores. ¿Cómo podría obtener el nombre del método actual (el que ejecuta el código) como NSString?


Como un ejemplo de dónde este tipo de cosas es útil: Esta es una plantilla para los mensajes NSLog que uso:

NSLog(@"%@ %@: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"A Message");

Esto descarga la clase y el método a la consola al iniciar sesión.


Según la respuesta de Martin, pero también le gustaría leer la información de tiempo de ejecución de Objective C 2.0 .

Sin embargo, jugar en las agallas como este tiende a llevar a código difícil de administrar.


Use __func__ . Esta es una cadena C, por lo que para un NSString, use [NSString stringWithUTF8String:__func__] .

Esto tiene dos ventajas sobre _cmd :

  1. Funciona en funciones C y métodos C ++ así como en métodos Objective-C. (De hecho, se requiere que __func__ exista por C99).
  2. En los métodos de Objective-C, incluye el tipo de método (método de clase frente a método de instancia) y el nombre de clase, así como el selector. Por ejemplo, "-[MyView drawRect:]" .