我有一个特殊的NSLog
方法swizzle,它将当前方法作为日志语句的一部分打印出来。
对于Objective-C方法,我有一个使用:NSStringFromSelector(_cmd)
对于非Objective-C方法,我有第二个使用__PRETTY_FUNCTION__
的宏,因为_cmd
未定义。
我现在正在尝试为两者使用相同的宏,所以我试图测试它是否已定义并认为我可以这样做:
NSString *command = (&_cmd != nil ? NSStringFromSelector(_cmd) : [NSString stringWithCString:__PRETTY_FUNCTION__ encoding:NSUTF8StringEncoding])
但是当在非Objective-C方法中使用宏时,我仍然会遇到一些Use of undeclared identifier '_cmd'
错误。如何进行运行时测试确定是否定义了_cmd
?
答案 0 :(得分:0)
您无法在运行时测试是否已定义_cmd
。
__PRETTY_FUNCTION__
宏在Objective-C方法中定义。只需在任何地方使用__PRETTY_FUNCTION__
,不要尝试使用_cmd
。
示例:
- (IBAction)mapWasTapped:(UITapGestureRecognizer *)sender {
NSLog(@"%s", __PRETTY_FUNCTION__);
}
这是输出:
2012-12-01 11:45:30.036 TestApp[92581:c07] -[MainViewController mapWasTapped:]