2010-12-11 10 views
15

Jaka jest wartość zmiennej _cmd, gdy uzyskuję do niej dostęp z treści funkcji w stylu C?_cmd wartość wewnątrz funkcji c

Czy jest to zdefiniowane tylko w metodach selektorów (Objective-C)?

P.S.

To pytanie może być spowodowane tym, że nie rozumiem, co to jest _cmd. Byłbym bardzo wdzięczny, gdyby ktoś dostarczył mi dobre źródło wyjaśnień.

Odpowiedz

17

Dotyczy tylko metod Objective-C, więc nie można uzyskać do niego dostępu. Pierwsze dwa parametry przekazane do wszystkich metod Objective-C to self i _cmd, a następnie wszelkie inne argumenty, jakie ma faktyczna metoda. Ponieważ ani self, ani _cmd nie są przekazywane do zwykłych funkcji języka C, nie można uzyskać do nich dostępu.

W żadnej z tych zmiennych nie ma nic szczególnie magicznego.

+3

dokumencie: [metody Cel-C] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/ Reference/reference.html). Zauważ, że dowolna funkcja C, która przyjmuje "id" i "SEL" jako pierwsze dwa argumenty, może być użyta jako implementacja metody. Podobnie, każda implementacja metody jest funkcją C, która przyjmuje "id" i "SEL" jako pierwsze dwa argumenty. – outis

+7

Aby być bardziej zrozumiałym, '_cmd' jest' SEL' - selektorem metody dla metody Objective-C. "Selektor metod to ciąg znaków C, który został zarejestrowany (lub" zamapowany ") w środowisku wykonawczym Objective-C." –

18

Głównym zastosowaniem funkcji _cmd jest uzyskanie nazwy metody, w której jest wywoływana.

Użycie _cmd z kilkoma innymi funkcjami zostało napisane poniżej.

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

Zamiast powyższej linii można również użyć PrettyFunction

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

Proszę spojrzeć here dalszych wyjaśnień.

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. 
Powiązane problemy