可可对象是
meta
类对象。据我所知,这实际上是Objective-C类,但没有规范。 那么如何检查两个类对象之间的相等性?如何检查一个类(元类对象)对象是否与另一个类对象相等
Class a = [@"" class];
Class b = [[NSObject alloc] init] class];
BOOL c = (a == b); // Is this right?
可可对象是
meta
类对象。据我所知,这实际上是Objective-C类,但没有规范。 那么如何检查两个类对象之间的相等性?如何检查一个类(元类对象)对象是否与另一个类对象相等
Class a = [@"" class];
Class b = [[NSObject alloc] init] class];
BOOL c = (a == b); // Is this right?
有用于这一目的完全是一个方法。引自Apple's current official reference manual page。
-[NSObject isSubclassOfClass:]
返回一个布尔值,指示接收等级是否是的一个子类,或等同于,一个给定的类。
无论如何,这包括子类,如果你想确切相等比较,你应该使用另一种方法。
另见更多关于方法:How to determine whether class B is a subclass of class A?
对NSObject有一个方法。 isKindOfClass
[a isKindofClass:[b class]];
你可以在这里阅读更多关于反映在Objective-C,如果你想包括继承
http://osmorphis.blogspot.com/2009/05/reflection-in-objective-c.html
madmik3是正确的。用你上面的例子,如果你测试了[a isKindOfClass:[b class]],它会测试YES,因为NSString从NSObject继承。
如果你想测试确切的类相等性,你可以使用isMemberOfClass:,它不包括继承。在你的例子中[a isMemberOfClass:[b class]]将被测试为NO,因为NSString是与NSObject不同的类。
根据我的经验,通常使用类方法进行测试,例如, [aMemberOfClass:[NSString类]]。
享受,
达明
只要是明确的,在'class'方法返回一个类,而不是一元类。 – jlehr 2012-02-11 17:15:48
@jlehr我在代码中发现了严重错误。谢谢。 – Eonil 2012-02-12 03:52:41
可能重复的[如何确定类B是否是类A的子类?](http://stackoverflow.com/questions/7282249/how-to-determine-whether-class-b-is-a-subclass- a) – Eonil 2014-05-27 11:12:55