4

名为 B 的类继承自 A (B : A)

[[B class] isKindOfClass:[A class]]

返回否

正在做

[[B new] isKindOfClass:[A class]]

返回是

所以左调用者必须是一个实例,但是如何对 Class 做同样的事情?

4

2 回答 2

20
- (BOOL)isKindOfClass:(Class)aClass

确实是一个实例方法(注意 - )并且不适用于该类

+ (BOOL)isSubclassOfClass:(Class)aClass

是一个类方法(注意+),这就是你要找的。

可是等等 !NSObject 类参考告诉我们“当它是消息的接收者时,只能通过它的名称来引用一个类。在所有其他情况下 [...] 使用类方法。”</p>

所以你将使用:

[B isSubclassOfClass:[A class]] 
于 2013-07-26T21:24:39.470 回答
0

AClass就像一个对象,它能够响应许多消息,打印描述并且还Class具有类属性。但是类属性指向类本身,这就是为什么如果您执行以下操作:

NSLog(@"%@",[[NSObject class]class]);

你得到“NSObject”。你认为有一个NSObject实例,但实际上你没有。

Class覆盖isKindOfClass:and isMemberOfClass:,这就是为什么[[NSObject isKindOfClass: [NSObject class]]返回NO,因为NSObject是一个Class,而不是一个NSObject实例。

测试它的方法是在实例上调用方法,或者像已经在评论中发布的那样使用Objective-C 运行时。

于 2013-07-26T21:28:39.237 回答