动态获取当前方法名称

17

我想要为我的项目中的所有类添加当前类名和方法名的追踪信息。

有没有一种类似于以下代码的方法可以在运行时获取当前方法名称:

NSLog(@"classname: %@", [self className]);

self是一种派生自NSObject类的类吗?

3个回答

35
NSLog(@"method name: %@", NSStringFromSelector(_cmd));

_cmd是一个类似于self的隐藏参数,所有Objective-C方法都会收到它。它的值是用来调用该方法的选择器。


我使用SEL myRunTimeSelector = _cmd。 - maddy
适当的解决方案包括解释。谢谢。 - XLE_22

18

编辑: 我认为这个方法更通用...看看吧..

NSLog(@"%s", __PRETTY_FUNCTION__);

如果我表现得有些居高临下,对不起,我并不是故意的... 我发现这个解决方案更通用... - Nishant
2
很棒的答案。我将它放入了一个宏中,就像这样: #define LOGME NSLog(@"%s", __PRETTY_FUNCTION__); - Ben H
@Nishant 给出了很好的答案。它提供了类名和方法名,有助于良好的调试。 - Ashok
太好了,这个宏帮了我很多忙,它提供了更全面的关于当前类和要调用的方法的信息。 - inix
不错的技巧,但它不仅提供了方法的名称,还提供了它所属的类名,这不是Alexi Groove最初想要的。包括“_cmd”的Chuck的解决方案是我认为最好的。 - XLE_22

1

这也可以工作:

NSLog(@"%@", [NSString stringWithUTF8String:__func__])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接