有什么方法可以问一个方法的名字吗?

时间:2010-04-22 02:00:29

标签: objective-c iphone cocoa

我正在尝试调试我正在处理的iPhone应用程序,并且在各种源文件中添加50个NSLog语句的想法给了我一些想法。

我想做的是写一对陈述,比如说

NSString *methodName = [self methodName];
NSLog(@"%@", methodName);

我可以粘贴到我需要的每个方法中。有没有办法做到这一点?是否有一些Objective-C构造用于询问方法的名称?或者我将不得不这么做?

4 个答案:

答案 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?