名为B的类继承自A(B:A)
[[B class] isKindOfClass:[A class]]
返回NO
操作
[[B new] isKindOfClass:[A class]]
返回YES
所以左调用者必须是一个实例,但是如何对一个类做同样的事情呢?
答案 0 :(得分:18)
- (BOOL)isKindOfClass:(Class)aClass
确实是一个实例方法(注意 - )并且不适用于类
+ (BOOL)isSubclassOfClass:(Class)aClass
是一种类方法(注意+),这就是你要找的东西。
但是等等! NSObject Class Reference告诉我们“当它是消息的接收者时,仅通过其名称引用类。在所有其他情况下[...]使用类方法。“
所以你将使用:
[B isSubclassOfClass:[A class]]
答案 1 :(得分:0)
Class
就像一个对象,它能够响应许多消息,打印描述以及Class
具有类属性。但是类属性指向类本身,这就是为什么如果你做类似的事情:
NSLog(@"%@",[[NSObject class]class]);
你得到“NSObject”。您认为有一个NSObject
实例,但您没有实例。
Class
会覆盖isKindOfClass:
和isMemberOfClass:
,这就是[[NSObject isKindOfClass: [NSObject class]]
返回NO
的原因,因为NSObject
是Class
,而不是一个NSObject
个实例。
测试它的方法是在实例上调用方法,或者像已在评论中发布的那样使用Objective-C runtime.