2010-12-11 3 views
15

Was ist der Wert von _cmd Variable, wenn ich es von C-style Funktion Körper zugreifen?_cmd wert innerhalb c funktionen

Ist es nur in Selections (Objective-C) Methoden definiert?

P.S.

Diese Frage kann von meinem Nichtverständnis, was _cmd ist, stammen. Ich würde mich sehr freuen, wenn mir jemand eine gute Erklärung liefern würde.

Antwort

17

Es ist nur für Objective-C-Methoden, so dass Sie nicht darauf zugreifen können. Die ersten zwei Parameter, die an alle Objective-C-Methoden übergeben werden, sind self und _cmd, dann, was auch immer für andere Argumente die eigentliche Methode braucht. Da weder self noch _cmd an reguläre C-Funktionen übergeben werden, können Sie nicht darauf zugreifen.

Es gibt nichts besonders Magie über jede Variable.

+3

als Referenz: [Objective-C Methoden] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/ Referenz/Referenz.html). Beachten Sie, dass jede C-Funktion, die als erste zwei Argumente ein "id" und ein "SEL" verwendet, als Methodenimplementierung verwendet werden kann. In ähnlicher Weise ist jede Methodenimplementierung eine C-Funktion, die als erste zwei Argumente ein 'id' und 'SEL' verwendet. – outis

+7

Um besonders klar zu sein, '_cmd' ist ein' SEL' - der Methodenselektor für die Objective-C-Methode. "Ein Methodenselektor ist eine C-Zeichenfolge, die mit der Objective-C-Laufzeit registriert (oder 'zugeordnet') wurde." –

18

Die Hauptfunktion der _cmd-Funktion besteht darin, den Methodennamen zu erhalten, in dem sie aufgerufen wird.

Die Verwendung der _cmd mit einigen anderen Funktionen wurde unten geschrieben.

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

Statt über die Linie können Sie auch PrettyFunction

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

Bitte here für weitere Erklärungen suchen.

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. 
Verwandte Themen