Ale*_*one 11 iphone class objective-c ios
我在其中一个类中定义了类引用:
Class _objectClass;
if([self.objectClass isSubclassOfClass:[NSManagedObject class]])
{
//does not get called
}
Run Code Online (Sandbox Code Playgroud)
我该如何检查Class
我正在处理什么?
更新:抱歉自动完成没有告诉我isKindOfClass:可用.我现在正在测试
jms*_*617 28
您有两种方法感兴趣:
isKindOfClass:
询问接收者它是一个类还是一个子类,在哪里isMemberOfClass:
询问接收者它是否是类,而不是子类.例如,假设您的NSManagedObject
子类名为objectClass.
if([self.objectClass isKindOfClass:[NSManagedObject class]]) {
// This will return YES
}
else if ([self.objectClass isMemberOfClass:[NSManagedObject class]]) {
// This will return NO
}
Run Code Online (Sandbox Code Playgroud)
第一个语句返回YES(或true,或1),因为objectClass是NSManagedObject的子类.第二个语句返回NO(或false,或0),因为虽然它是一个子类,但它本身不是类.
更新:我想更新这个答案,为下面的评论带来亮点,这说明这个解释是错误的,因为下面的代码行:
if ([self.class isKindOfClass:self.class])
Run Code Online (Sandbox Code Playgroud)
将返回false.这是正确的,它会返回false.但这个例子是错误的.从NSObject继承的每个类也符合NSObject协议.在这个协议中有一个叫做class
"返回接收者类的类对象"的方法.在这种情况下,self.class返回自身的任何类对象.但是,从文件isKindOfClass:
-
返回一个布尔值,指示接收者是给定类的实例还是从该类继承的任何类的实例.
因此,将此消息发送到self.class(这是一个类)将返回false,因为它意味着要发送到类的实例,而不是类本身.
如果您将示例更改为
if([self isKindOfClass:self.class])
Run Code Online (Sandbox Code Playgroud)
你会得到YES(或者是真,或1).
我在这里的答案假设self.objectClass是一个名为objectClass 的实例的访问器.当然,对于类的实例来说,这是一个可怕的名称,但问题不在于"我如何命名类的实例".
归档时间: |
|
查看次数: |
10926 次 |
最近记录: |