Any way to ask a method for its name?
I'm trying to debug an iPhone app I'm working on, and the idea of adding fifty NSLog statements to the various source files gives me the willies.
What I'd like to do is write a pair of statements, say
开发者_JAVA技巧NSString *methodName = [self methodName];
NSLog(@"%@", methodName);
that I can just paste into each method I need to. Is there a way to do this? Is there some Objective-C construct for asking a method for its name? Or am I gonna have to do this the hard way?
Try NSLog(@"%s", __func__)
. This prints out a pretty description, like -[MyView drawRect:]
.
This also works with functions. It's a compiler feature.
Use: NSLog("%@", NSStringFromSelector(_cmd));
_cmd
is a special variable passed to every method just like self
which is a reference to the selector that caused the method to be invoked (basically the method's name and signature).
I use the following macros frequently:
#if DEBUG
# define LOG(format, args ...) fprintf(stderr, format "\n", ## args)
# ifdef __cplusplus
# define ERR(format, args ...) fprintf(stderr, "[%s] (%s:%i): " format "\n", __PRETTY_FUNCTION__, __FILE__, __LINE__, ## args)
# else
# define ERR(format, args ...) fprintf(stderr, "[%s] (%s:%i): " format "\n", __func__, __FILE__, __LINE__, ## args)
# endif
#else
# define LOG(format, args ...)
# define ERR(format, args ...)
#endif
If you always wanted the function name you could easily adapt them as required.
This is what you want:
NSLog(@"%s", __PRETTY_FUNCTION__);
For more info on related logging stuff, read over the answers to this question: How to print out the method name and line number and conditionally disable NSLog?
精彩评论