2010-12-11 16 views
15

¿Cuál es el valor de _cmd variable cuando accedo desde el cuerpo de la función C-style?_cmd value inside c functions

¿Está definido solo dentro de los selectores (Objective-C)?

P.S.

Esta pregunta puede deberse a mi desconocimiento de lo que es _cmd. Agradecería mucho si alguien me proporcionara una buena fuente de explicación.

Respuesta

17

Es solo para métodos Objective-C, por lo que no puede acceder a él. Los dos primeros parámetros pasados ​​a todos los métodos de Objective-C son self y _cmd, luego cualesquiera otros argumentos que tome el método real. Como ni self ni _cmd se pasan a las funciones C normales, no puede acceder a ellas.

No hay nada particularmente mágico en ninguna de las dos variables.

+3

para la referencia: [métodos de Objective-C] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/ Reference/reference.html). Tenga en cuenta que cualquier función C que tome un 'id' y' SEL' como sus primeros dos argumentos se puede utilizar como una implementación de método. De forma similar, cualquier implementación de método es una función C que toma un 'id' y' SEL' como sus dos primeros argumentos. – outis

+7

Para ser más claros, '_cmd' es un' SEL' - el selector de método para el método Objective-C. "Un selector de método es una cadena C que ha sido registrada (o 'mapeada') con el tiempo de ejecución de Objective-C." –

18

El principal uso de la función _cmd es obtener el nombre del método al que se llama.

El uso de _cmd con algunas otras funciones se ha escrito a continuación.

NSLog(@"<%@:%@:%d>", NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__); 

En vez de línea anterior también se puede utilizar PrettyFunction

NSLog(@"%s", __PRETTY_FUNCTION__); 
0

Por favor, busque here más explicaciones.

func class_addMethod(_ cls: AnyClass!, 
        _ name: Selector!, 
        _ imp: IMP!, 
        _ types: UnsafePointer<Int8>!) -> Bool 

imp:

A function which is the implementation of the new method. The function must take at least two arguments—self and _cmd.