How to get the name or signature of the current method into an NSString?
Solution 1:
Every method call also passes two hidden arguments: an id
named self
and a SEL
named _cmd
. You can use NSStringFromSelector
to convert the method selector to an NSString:
NSStringFromSelector(_cmd);
Solution 2:
Use __func__
. This is a C string, so for an NSString, use [NSString stringWithUTF8String:__func__]
.
This has two advantages over _cmd
:
- It works in C functions and C++ methods as well as Objective-C methods. (In fact,
__func__
is required to exist by C99.) - In Objective-C methods, it includes the method type (class method vs. instance method) and the class name as well as the selector. For example,
"-[MyView drawRect:]"
.
Solution 3:
As an example of where this sort of thing is useful: This is a template for NSLog messages that I use:
NSLog(@"%@ %@: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"A Message");
This dumps the class and the method to the console when logging.
Solution 4:
As per Martin's answer, but you might also like to read the Objective C 2.0 Runtime information.
Playing in the guts like this tends to lead to hard to manage code, however.