我在其中一个使用以下类的类中定义了类引用:
Class _objectClass;
if([self.objectClass isSubclassOfClass:[NSManagedObject class]])
{
//does not get called
}
如何查看我正在处理的Class
是什么类型?
更新:对不起自动完成没有告诉我isKindOfClass:可用。我现在正在测试
答案 0 :(得分:28)
您有两种方法感兴趣:
isKindOfClass:
询问接收者是否是类或子类,其中isMemberOfClass:
询问接收者是否是类,但不是子类。例如,假设您拥有名为objectClass的NSManagedObject
子类。
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),因为虽然它是一个子类,但它本身不是类。
更新: 我想更新这个答案,为下面的评论带来亮点,这说明这个解释是错误的,因为以下代码行:< / p>
if ([self.class isKindOfClass:self.class])
会返回false。这是正确的,它会返回false。但这个例子是错误的。从NSObject继承的每个类也符合NSObject协议。在这个协议中有一个名为class
的方法,它“返回接收者类的类对象”。在这种情况下,self.class返回自身的任何类对象。但是,请参阅isKindOfClass:
-
返回一个布尔值,指示接收器是否为 给定类的实例或继承自的任何类的实例 那个班。
因此,将此消息发送到self.class(这是一个类)将返回false,因为它意味着要发送到类的实例,而不是类本身。
如果您将示例更改为
if([self isKindOfClass:self.class])
你会得到YES(或者是真,或者1)。
我在这里的回答假定self.objectClass是名为objectClass的实例的访问者。当然,这对于一个类的实例来说是一个可怕的名称,但问题不在于“我如何命名类的实例”。
答案 1 :(得分:1)
是的,[self.objectClass isSubclassOfClass:[NSManagedObject class]]
是正确的。如果为false,则表示self.objectClass
表示的类不是NSManagedObject
的子类。我不明白你的问题是什么,或者你在期待什么。