【问题标题】:Get __PRETTY_FUNCTION__ to only print the first part of the selector?获取 __PRETTY_FUNCTION__ 只打印选择器的第一部分?
【发布时间】:2011-05-01 19:33:13
【问题描述】:
有没有办法让__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'
*/
}
【问题讨论】:
标签:
objective-c
macros
selector
【解决方案1】:
然后你应该使用类似的东西来编辑那个字符串:
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]); \
}
【解决方案2】:
没有。但是您可以轻松编写自己的宏,该宏采用_cmd(传递给每个方法的两个隐藏参数之一),将其转换为带有NSStringFromSelector() 的字符串,并解析字符串以删除它找到的第一个冒号之后(包括第一个冒号)之后的所有内容.