获取__PRETTY_FUNCTION__只打印选择器的第一部分?

时间:2011-05-01 19:33:14

标签: objective-c macros selector

有没有办法让__PRETTY_FUNCTION__宏只解析为ObjC选择器的第一部分?

-(void)arg1:(int)a1 arg2:(int)a2 arg3:(int)a3 {
     printf("%s\n",__PRETTY_FUNCTION__);
     /* Prints 'arg1:arg2:arg3'
        I want it to print 'arg1'
      */
}

2 个答案:

答案 0 :(得分:4)

然后你应该使用类似的东西来编辑那个字符串:

NSString *method = [NSString stringWithFormat:@"%s", __PRETTY_FUNCTION__];
[method substringToIndex:[method rangeOfString:@":"].location];

然后您可以制作一个宏以便于使用(使用_cmd可以获得更好的结果,如Ole所述

#define __LOG_PRETTY_FUNCTION__ { \
    NSString *method = NSStringFromSelector(_cmd); \
    NSUInteger location = [method rangeOfString:@":"].location; \
    if(location == NSNotFound) NSLog(@"%@", method); \
    else NSLog(@"%@", [method substringToIndex:location]); \
}

答案 1 :(得分:3)

没有。但是你可以轻松编写自己的宏,它接受_cmd(传递给每个方法的两个隐藏参数之一),将其转换为带有NSStringFromSelector()的字符串并解析字符串以删除所有内容,包括它发现的第一个冒号。