objective-c - 输出正在调用方法的类的名称的最佳方式是什么?

标签 objective-c class inheritance logging

我知道 NSStringFromClass。

我的问题涉及以下情况:在继承树中的多个类中实现相同的方法,并且您想要调试有关它从哪个类执行的信息。

示例:

让我们有三个类: A-->B-->C ,继承如箭头所示。

如果它们每个都有一个方法 foo(),定义为:

-(void) foo
{
 // Do some work particular to the class it is in.
  .....
  //Each method ends with the debugging statement:
  NSLog("In foo of class:%$",NSClassFromString([self class]));
}

当B类的foo调用[super foo]时,就会出现问题。当[super foo](即A类)到达NSLog语句时,[self class]返回B类,而不是A类。

同样,如果 C 调用 [super foo],super 中的日志语句将记录类 C。

我想要做的是输出正在执行方法实现的类 - 因此如果 B 类调用 [super foo],那么 [A foo] 中的日志语句输出 A 类。

简单的方法是将 NSClassFromString 替换为代表类名的硬编码字符串,但我想知道是否有更好的方法来做到这一点?

最佳答案

您可以使用__PRETTY_FUNCTION__来包含类和方法名称:

NSLog(@"Greetings from %s", __PRETTY_FUNCTION__);

我不相信有一个仅用于类名的编译时宏。

关于objective-c - 输出正在调用方法的类的名称的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8966818/

相关文章:

objective-c - 使用 UIToolBar 上的完成按钮关闭 UIPickerView

ios - 'NSArray' 没有可见的@interface 声明选择器'exchangeObjectAtIndex :withObjectAtIndex

java - java中如何交换两个数组对象

javascript - 为什么我的数据类成员不能直接使用?

javascript - CoffeeScript 类和绑定(bind)

objective-c - UPX 能够打包 Dylibs 吗?

objective-c - 将日期从一种格式转换为另一种格式

c# 继承字典重写默认属性

css - 防止<img>标签继承未知来源的css样式

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?