是否有一个预处理器宏可以扩展到当前选择器?

时间:2012-01-21 15:11:04

标签: objective-c c-preprocessor predefined-macro

  

可能重复:
  Dynamically retrieving current method's name
  Obj-C introspection: How can a method reference it's own selector?

这适用于Objective-C,是否有预处理器宏或某些东西来获取当前选择器的SEL值?具体来说,我正在寻找类似的东西:

-(void) someSelector
{
    SEL mySelector = __CURRENT_SELECTOR__;
    NSLog(@"I'm in selector %@",NSStringFromSelector(mySelector));
}

它有点像__FILE__宏但这是获取当前选择器。如果更改选择器名称,将其传递给其他人并不担心更新它非常有用。

3 个答案:

答案 0 :(得分:9)

每个方法都有两个隐式参数,selfid(接收者)和SEL,称为_cmd,这可能就是你想要的。

请注意,这与预编译器或编译时之前的任何内容无关,_cmd不是宏,它是一个参数。

-(void) someSelector
{
    NSLog(@"I'm in selector %@",NSStringFromSelector(_cmd));
}

答案 1 :(得分:4)

西迪尔说的应该回答你的问题。只是想添加,如果您只需要它进行日志记录,您也可以使用通常的C关键字,例如

NSLog( @"%s" , __PRETTY_FUNCTION__ );

答案 2 :(得分:0)

NSLog( @"%s" , _cmd );

_cmd将为您提供当前选择器(仅在objective-c中可用)