Objective c 如何确定B类是否为a类的子类?
似乎如果您为Mac OS开发,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及更
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协议。)