开发者

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?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜