在Objective C中如何在运行时获取self的类名?

时间:2013-12-11 22:30:16

标签: objective-c class objective-c-runtime

在Objective C中,'self'是某个类的实例化。我怎样才能找出它是什么类的实例?我想要一个包含该类名称的NSString。我知道isKindOfClass但是只测试它是否是一个特定的类,我必须事先知道它的名字。如果我的应用程序中有20个类(或50个),我必须写出20个isKindOfClass语句来找出它是哪个类,并且我必须重写它们以在不同的应用程序中执行相同的测试。获得课程名称是否有更直接的方式?

另外,如何获取包含我在运行时所使用的方法名称的NSString?

我想在运行时调试方法中使用这些函数。

这个问题涉及Objective C和iOS。

3 个答案:

答案 0 :(得分:11)

对于班级:

NSStringFromClass([self class]);

对于方法(假设您使用的是您感兴趣的方法):

NSStringFromSelector(_cmd);

旁注,_cmd就像self一样传递给Objective C中的每个方法,并且是您所使用方法的SEL(选择器)。

答案 1 :(得分:3)

另一种选择是:

NSLog(@"%s", __PRETTY_FUNCTION__);

很长但是一旦你使用它几次输入_ 标签就会自动完成__PRETTY_FUNCTION__

答案 2 :(得分:1)

您可以使用isMemberOfClass:来判断给定对象是否是该特定类的实例。

您可以使用NSStringFromClass(self.class)获取当前的班级名称 您可以使用NSStringFromSelector(_cmd)获取当前方法名称(_cmd选择器是每个方法的隐藏参数)。