如何获取当前方法的名称或签名到NSString中?
例如:我有一个方法-myFooBarMethod:withFoo:bar:moreFoo:
并在该方法的实现中,我想dynamic地获取它的名字,比如@"-myFooBarMethod:withFoo:bar:moreFoo:
into NSString。方法签名的types。
我觉得这必须与select器做些什么。 我怎么能得到当前方法(执行代码的那个)的名称为NSString?
每个方法调用还传递两个隐藏的参数:名为self
的id
和名为_cmd
的SEL
。 您可以使用NSStringFromSelector
将方法select器转换为NSString:
NSStringFromSelector(_cmd);
使用__func__
。 这是一个Cstring,所以对于一个NSString,使用[NSString stringWithUTF8String:__func__]
。
这比_cmd
有两个优点:
- 它适用于C函数和C ++方法以及Objective-C方法。 (事实上,C99需要存在
__func__
。) - 在Objective-C方法中,它包括方法types(类方法和实例方法)和类名以及select器。 例如,
"-[MyView drawRect:]"
。
作为这种事情有用的例子:这是我使用的NSLog消息的模板:
NSLog(@"%@ %@: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"A Message");
这会在logging时将类和方法转储到控制台。
按照Martin的回答,但是您也可能想要阅读Objective C 2.0运行时信息。
然而,像这样的胆子往往会导致很难pipe理代码。