名为 B 的类继承自 A (B : A)
[[B class] isKindOfClass:[A class]]
返回否
正在做
[[B new] isKindOfClass:[A class]]
返回是
所以左调用者必须是一个实例,但是如何对 Class 做同样的事情?
名为 B 的类继承自 A (B : A)
[[B class] isKindOfClass:[A class]]
返回否
正在做
[[B new] isKindOfClass:[A class]]
返回是
所以左调用者必须是一个实例,但是如何对 Class 做同样的事情?
- (BOOL)isKindOfClass:(Class)aClass
确实是一个实例方法(注意 - )并且不适用于该类
+ (BOOL)isSubclassOfClass:(Class)aClass
是一个类方法(注意+),这就是你要找的。
可是等等 !NSObject 类参考告诉我们“当它是消息的接收者时,只能通过它的名称来引用一个类。在所有其他情况下 [...] 使用类方法。”</p>
所以你将使用:
[B isSubclassOfClass:[A class]]
AClass
就像一个对象,它能够响应许多消息,打印描述并且还Class
具有类属性。但是类属性指向类本身,这就是为什么如果您执行以下操作:
NSLog(@"%@",[[NSObject class]class]);
你得到“NSObject”。你认为有一个NSObject
实例,但实际上你没有。
Class
覆盖isKindOfClass:
and isMemberOfClass:
,这就是为什么[[NSObject isKindOfClass: [NSObject class]]
返回NO
,因为NSObject
是一个Class
,而不是一个NSObject
实例。
测试它的方法是在实例上调用方法,或者像已经在评论中发布的那样使用Objective-C 运行时。