如何获取当前方法的名称或签名到NSString中?

例如:我有一个方法-myFooBarMethod:withFoo:bar:moreFoo:并在该方法的实现中,我想dynamic地获取它的名字,比如@"-myFooBarMethod:withFoo:bar:moreFoo: into NSString。方法签名的types。

我觉得这必须与select器做些什么。 我怎么能得到当前方法(执行代码的那个)的名称为NSString?

每个方法调用还传递两个隐藏的参数:名为selfid和名为_cmdSEL 。 您可以使用NSStringFromSelector将方法select器转换为NSString:

 NSStringFromSelector(_cmd); 

使用__func__ 。 这是一个Cstring,所以对于一个NSString,使用[NSString stringWithUTF8String:__func__]

这比_cmd有两个优点:

  1. 它适用于C函数和C ++方法以及Objective-C方法。 (事实上​​,C99需要存在__func__ 。)
  2. 在Objective-C方法中,它包括方法types(类方法和实例方法)和类名以及select器。 例如, "-[MyView drawRect:]"

作为这种事情有用的例子:这是我使用的NSLog消息的模板:

 NSLog(@"%@ %@: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"A Message"); 

这会在logging时将类和方法转储到控制台。

按照Martin的回答,但是您也可能想要阅读Objective C 2.0运行时信息。

然而,像这样的胆子往往会导致很难pipe理代码。