2012-02-11 4 views
2

В Какао находится Class объект, который является meta объект класса. Как я знаю, на самом деле это класс Objective-C, но спецификации нет. Итак, как я могу проверить равенство между двумя объектами класса?Как проверить объект класса (объект метакласса) равен другому объекту класса

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

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

Просто чтобы быть ясно, то 'class' метод возвращает класс, а не метакласс. – jlehr

+0

@jlehr Я обнаружил критическую ошибку в моем коде. Благодарю. – Eonil

+0

Возможный дубликат [Как определить, является ли класс B подклассом класса A?] (Http://stackoverflow.com/questions/7282249/how-to-determine-whether-class-b-is-a-subclass- of-class-a) – Eonil

ответ

3

Там есть способ именно для этой цели. Цитируется по Apple's current official reference manual page.

-[NSObject isSubclassOfClass:] 

Возвращает логическое значение, указывающее, принимающий класс является ли подкласс, или идентичны, данный класс.

Во всяком случае, это включает подклассы, и если вы хотите точного сравнения равенства, вы должны использовать другой метод.

Смотрите также больше о методе: How to determine whether class B is a subclass of class A?

4

madmik3 является правильным, если вы хотите включить наследование. В приведенном выше примере, если вы протестировали [isKindOfClass: [b class]], он проверит ДА, потому что NSString наследует от NSObject.

Если вы хотите проверить точное равенство классов, вы можете использовать isMemberOfClass :, который НЕ включает наследование. В вашем примере [a isMemberOfClass: [b class]] будет тестироваться как НЕТ, поскольку NSString - это другой класс, чем NSObject.

В моем опыте типично тестировать с использованием метода класса, например. [a isMemberOfClass: [NSString class]].

Наслаждайтесь,

Damien

Смежные вопросы