有没有办法让__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'
*/
}
答案 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()
的字符串并解析字符串以删除所有内容,包括它发现的第一个冒号。