2009-09-22 21 views
17

Chciałbym móc umieścić komunikaty śledzenia bieżącej nazwy klasy i nazwy metody dla wszystkich klas w moim projekcie.Dynamiczne pobieranie nazwy obecnej metody

Czy istnieje sposób, aby uzyskać nazwę bieżącej metody jest w czasie wykonywania, podobnie jak:

NSLog(@"classname: %@", [self className]); 

gdzie jaźń jest klasa pochodząca z NSObject?

Odpowiedz

35
NSLog(@"method name: %@", NSStringFromSelector(_cmd)); 

_cmd jest ukryty argumentu (np self) wszystkie metody celem C otrzymać. Jego wartość jest selektorem, który został użyty do wywołania metody.

+0

i wykorzystać SEL myRunTimeSelector = _cmd. Dzięki – Alok

+0

Właściwe rozwiązanie zawierające wyjaśnienia. Dzięki. –

18

edycja: myślę, ta metoda jest bardziej ogólne ... to sprawdzić ..

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

Przepraszam, jeśli wyjdę jako protekcjonalny, nie chciałem ... Stwierdziłem, że to rozwiązanie jest bardziej ogólne ... – Nishant

+2

Świetna odpowiedź. umieszczam go w makrze: #define LOGME NSLog (@ "% s", \ _ \ _ PRETTY_FUNCTION \ _ \ _); –

+0

Świetna odpowiedź @Nishant .. Podaje zarówno nazwę klasy, jak i nazwę metody dla dobrego debugowania ... –

1

Działa to również:

NSLog(@"%@", [NSString stringWithUTF8String:__func__]) 
Powiązane problemy