2010-12-11 18 views
15

Qual è il valore della variabile _cmd quando accedo al corpo della funzione stile C?_cmd valore all'interno delle funzioni c

È definito solo nei metodi dei selettori (Objective-C)?

P.S.

Questa domanda può essere originata dalla mia non comprensione di cosa sia _cmd. Apprezzerei molto se qualcuno mi fornisse una buona fonte di spiegazioni.

risposta

17

È solo per i metodi Objective-C, quindi non è possibile accedervi. I primi due parametri passati a tutti i metodi Objective-C sono self e _cmd, quindi qualsiasi altro argomento viene utilizzato dal metodo effettivo. Poiché né lo self né lo _cmd vengono passati alle normali funzioni C, non è possibile accedervi.

Non c'è niente di particolarmente magico in entrambe le variabili.

+3

Per riferimento: [metodi Objective-C] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/ Riferimento/reference.html). Nota che qualsiasi funzione C che prende un 'id' e' SEL' come i suoi primi due argomenti può essere usata come implementazione del metodo. Allo stesso modo, qualsiasi implementazione di metodo è una funzione C che prende un 'id' e' SEL' come primi due argomenti. – outis

+7

Per essere più chiaro, '_cmd' è un' SEL' - il selettore di metodo per il metodo Objective-C. "Un selettore di metodo è una stringa C che è stata registrata (o" mappata ") con il runtime Objective-C." –

18

L'uso principale della funzione _cmd consiste nell'ottenere il nome del metodo in cui è chiamato.

L'uso del _cmd con alcune altre funzioni è stato scritto di seguito.

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

Invece di linea di cui sopra è anche possibile utilizzare PrettyFunction

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

Si prega di guardare here per ulteriori chiarimenti.

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. 
Problemi correlati