我正在尝试调试我正在处理的iPhone应用程序,并且在各种源文件中添加50个NSLog语句的想法给了我一些想法。
我想做的是写一对陈述,比如说
NSString *methodName = [self methodName];
NSLog(@"%@", methodName);
我可以粘贴到我需要的每个方法中。有没有办法做到这一点?是否有一些Objective-C构造用于询问方法的名称?或者我将不得不这么做?
答案 0 :(得分:22)
试试NSLog(@"%s", __func__)
。这会打印出漂亮的描述,例如-[MyView drawRect:]
。
这也适用于功能。这是一个编译器功能。
答案 1 :(得分:11)
使用:NSLog("%@", NSStringFromSelector(_cmd));
_cmd
是一个传递给每个方法的特殊变量,就像self
一样,它是对导致调用该方法的选择器的引用(基本上是方法的名称和签名)。
答案 2 :(得分:4)
我经常使用以下宏:
#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
如果您一直想要功能名称,可以根据需要轻松调整它们。
答案 3 :(得分:2)
这就是你想要的:
NSLog(@"%s", __PRETTY_FUNCTION__);
有关相关日志记录内容的详细信息,请仔细阅读此问题的答案:How to print out the method name and line number and conditionally disable NSLog?