Cocoa中有Class
个对象,它是 meta 类对象。据我所知,这实际上是Objective-C类,但没有规范。
那么如何检查两个类对象之间的相等性呢?
Class a = [@"" class];
Class b = [[NSObject alloc] init] class];
BOOL c = (a == b); // Is this right?
答案 0 :(得分:8)
NSObject上有一个方法。 isKindOfClass
[a isKindofClass:[b class]];
您可以在这里阅读更多关于objective-c中反射的内容
http://osmorphis.blogspot.com/2009/05/reflection-in-objective-c.html
答案 1 :(得分:4)
madmik3是正确的。使用上面的示例,如果您测试了[a isKindOfClass:[b class]],它将测试YES,因为NSString继承自NSObject。
如果要测试确切的类相等性,可以使用isMemberOfClass:,它不包含继承。在你的例子中[aMeMemberOfClass:[b class]]将测试为NO,因为NSString是一个与NSObject不同的类。
根据我的经验,通常使用类方法进行测试,例如[a isMemberOfClass:[NSString class]]。
享受,
达明
答案 2 :(得分:4)
有一种完全符合此目的的方法。引自Apple's current official reference manual page。
-[NSObject isSubclassOfClass:]
返回一个布尔值,指示接收类是否是给定类的子类或相同。
无论如何,这包括子类,如果你想要完全相等比较,你应该使用另一种方法。
有关方法的更多信息,请参阅:How to determine whether class B is a subclass of class A?