2010-12-11 53 views
15

Quelle est la valeur de la variable _cmd lorsque j'y accède à partir du corps de la fonction C-style?Valeur _cmd dans les fonctions c

Est-il défini uniquement à l'intérieur des sélecteurs (Objective-C)?

P.S.

Cette question peut provenir de ma non-compréhension de ce qu'est _cmd. J'apprécierais grandement si quelqu'un m'a fourni une bonne source d'explication.

Répondre

17

C'est uniquement pour les méthodes Objective-C, donc vous ne pouvez pas y accéder. Les deux premiers paramètres passés à toutes les méthodes Objective-C sont self et _cmd, alors quels que soient les autres arguments que la méthode actuelle prend. Puisque ni self ni _cmd ne sont passés aux fonctions C normales, vous ne pouvez pas y accéder.

Il n'y a rien de particulièrement magique dans ces variables.

+3

Pour référence: [méthodes Objective-C] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/ Référence/référence.html). Notez que toute fonction C qui prend un 'id' et' SEL' comme ses deux premiers arguments peut être utilisée comme une implémentation de méthode. De même, toute implémentation de méthode est une fonction C qui prend un 'id' et' SEL' comme ses deux premiers arguments. – outis

+7

Pour être plus clair, '_cmd' est un' SEL' - le sélecteur de méthode pour la méthode Objective-C. "Un sélecteur de méthode est une chaîne C qui a été enregistrée (ou 'mappée') avec le runtime Objective-C." –

18

L'utilisation principale de la fonction _cmd consiste à obtenir le nom de la méthode dans laquelle elle est appelée.

L'utilisation de _cmd avec d'autres fonctions a été écrite ci-dessous.

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

au lieu de la ligne ci-dessus, vous pouvez également utiliser PrettyFunction

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

S'il vous plaît regarder here pour plus d'explications.

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.