Objective c 如何确定B类是否为a类的子类?

Objective c 如何确定B类是否为a类的子类?,objective-c,ios,Objective C,Ios,似乎如果您为Mac OS开发,NSObject具有isSubclassOfClass方法。但是当我检查同一类的iOS类引用时,它没有该方法(Xcode抱怨该方法) 我目前的解决方案是将一个方法-(void)iAmClassB,然后对选择器执行响应:iAmClassB,但这似乎是人为的。我错过什么了吗 id a= ...; if([a isKindOfClass:[A class]]){ ... } 我应该做这项工作。你很少需要看看它是否真的是一个子类。请参阅。它可从iOS 2.0及更

似乎如果您为Mac OS开发,
NSObject
具有
isSubclassOfClass
方法。但是当我检查同一类的iOS类引用时,它没有该方法(Xcode抱怨该方法)

我目前的解决方案是将一个方法
-(void)iAmClassB
,然后对选择器执行
响应:iAmClassB
,但这似乎是人为的。我错过什么了吗

id a= ...;
if([a isKindOfClass:[A class]]){
     ...
}

我应该做这项工作。你很少需要看看它是否真的是一个子类。请参阅。

它可从iOS 2.0及更高版本SDK获得

if ([ClassB isSubclassOfClass:[ClassA class]]) {


    NSLog(@"yes ClassB is SubclassOfClass of ClassA");

}       
:

isSubclassOfClass:

返回一个布尔值,该值指示接收类是否为 子类给定类的子类或与给定类相同的子类

   + (BOOL)isSubclassOfClass:(Class)aClass
参数

A类

类对象

返回值

YES
如果接收类是-
aClass
的子类或与之相同, 否则

可用性

在iOS 2.0及更高版本中提供


应在类:[a method]上调用前缀为
+
的方法,而不是在实例:[a method]上调用。因为你做的是后者,XCode告诉你没有实例方法。“iOS 2.0和更高版本”…所以每一个非苹果内部SDK版本。我想你误解了这个方法的名称
isKindOfClass:
仍然会告诉您它是否真的是一个子类,它只是对对象实例而不是
对象进行操作。也就是说,
if([a.class=a.class])
做的事情与
if(a.class==a.class | |[a.class isSubclassOfClass:a.class])
做的事情相同。(为清晰起见,使用点语法;假定iOS 8版本的NSObject协议。)