0

我有一个特殊的NSLog方法 swizzle,它将当前方法打印为日志语句的一部分。

对于 Objective-C 方法,我有一个宏,它使用:NSStringFromSelector(_cmd)

对于非 Objective-C 方法,我有第二个宏使用,__PRETTY_FUNCTION__因为_cmd未定义。

我现在正在尝试对两者使用相同的宏,因此我正在尝试测试它是否已定义并认为我可以这样做:

NSString *command = (&_cmd != nil ? NSStringFromSelector(_cmd) : [NSString stringWithCString:__PRETTY_FUNCTION__ encoding:NSUTF8StringEncoding])

Use of undeclared identifier '_cmd'但是当宏用于非 Objective-C 方法时,我仍然会遇到一些错误。如何进行运行时测试以确定是否_cmd已定义?

4

1 回答 1

1

您无法在运行时测试是否_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:]
于 2012-12-01T17:47:23.693 回答