我在使用的类之一中定义了一个类引用:
Class _objectClass;
if([self.objectClass isSubclassOfClass:[NSManagedObject class]])
{
//does not get called
}
如何检查Class
我正在处理的类型?
更新:抱歉,自动完成没有告诉我 isKindOfClass: 可用。我现在正在测试
我在使用的类之一中定义了一个类引用:
Class _objectClass;
if([self.objectClass isSubclassOfClass:[NSManagedObject class]])
{
//does not get called
}
如何检查Class
我正在处理的类型?
更新:抱歉,自动完成没有告诉我 isKindOfClass: 可用。我现在正在测试
您感兴趣的方法有两种:
isKindOfClass:
询问接收者它是一个类还是一个子类,而 asisMemberOfClass:
询问接收者它是一个类,而不是一个子类。例如,假设您有NSManagedObject
一个名为 objectClass 的子类。
if([self.objectClass isKindOfClass:[NSManagedObject class]]) {
// This will return YES
}
else if ([self.objectClass isMemberOfClass:[NSManagedObject class]]) {
// This will return NO
}
第一条语句返回 YES(或 true,或 1),因为 objectClass 是 NSManagedObject 的子类。第二条语句返回 NO(或 false,或 0),因为虽然它是子类,但它不是类本身。
更新:我想更新此答案以阐明下面的评论,该评论指出此解释是错误的,因为以下代码行:
if ([self.class isKindOfClass:self.class])
将返回错误。这是正确的,它会返回错误。但是这个例子是错误的。每个继承自 NSObject 的类也符合 NSObject 协议。在这个协议中有一个被称为class
“返回接收者类的类对象”的方法。在这种情况下, self.class 返回任何类对象 self 。但是,从文档中isKindOfClass:
-
返回一个布尔值,指示接收者是给定类的实例还是从该类继承的任何类的实例。
因此,将此消息发送到 self.class(它是一个类)会返回 false,因为它是要发送到类的实例,而不是发送到类本身。
如果您将示例更改为
if([self isKindOfClass:self.class])
您将得到 YES(或 true,或 1)。
我在这里的回答假定 self.objectClass 是一个名为 objectClass的实例的访问器。当然,对于类的实例来说,这是一个糟糕的名称,但问题不是“我如何命名类的实例”。
是的,[self.objectClass isSubclassOfClass:[NSManagedObject class]]
是正确的。如果为假,则表示所代表的类self.objectClass
不是 的子类NSManagedObject
。我不明白你的问题是什么,或者你在期待什么。