如何检查Class(元类对象)对象与另一个类对象相同

时间:2012-02-11 13:20:20

标签: objective-c ios cocoa

Cocoa中有Class个对象,它是 meta 类对象。据我所知,这实际上是Objective-C类,但没有规范。 那么如何检查两个类对象之间的相等性呢?

Class a = [@"" class];
Class b = [[NSObject alloc] init] class];

BOOL c = (a == b);  // Is this right?

3 个答案:

答案 0 :(得分:8)

答案 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?