【问题标题】:May I use == or != to compare [aClass class] with [bClass class]?我可以使用 == 或 != 来比较 [aClass class] 和 [bClass class] 吗?
【发布时间】:2023-03-19 14:25:01
【问题描述】:
if ([aClass class] == [bClass class]) {

}

if ([[aClass class] isEqual:[bClass class]]) {

}

如果不是,为什么?

【问题讨论】:

  • 这些是您可以使用的结构 if([someObject isKindOfClass:[NSManagedObject class]]){}
  • @DevanshuSaini 你不会想在这里使用isKindOfClassisMemberOfClass 会更好。
  • aClassbClass 是指向类对象的指针吗?还是指向实例的指针?

标签: objective-c class


【解决方案1】:

您可以像这样使用isMemberOfClass 来检查两个对象是否属于同一类

if ([aClas isMemberOfClass:class] && [bClas isMemberOfClass:class]) {

}

【讨论】:

  • 这是不正确的。 isKindOfClass 检查接收者是类的实例还是继承自类的任何类的实例。
  • 你们俩都是对的 :-)。例如,考虑实际类不是 NSString 而是 __NSCFString 的情况。从开发人员的角度来看,它们是相同的。但从技术上讲,它们属于不同的类别。
  • @ВладимирВодолазкий 这不是我所指的例子。假设aClasUIViewbClasUIControl。最后classUIResponder。此答案中的if 声明将是正确的,但显然aClasbClas 并不相同。
  • @maddy 好的,我同意,但是要传播这种方法,我们可以使用 NSObject 作为基础进行比较。成功的关键在于正确选择课程。
  • @rmaddy 感谢您的建议,使用isMemberOfClass 编辑了答案。
【解决方案2】:

是的,类对象总是可以与物理相等进行比较(==!=)。每个类总是有一个类对象。两个不同的类对象永远不会“相等”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    相关资源
    最近更新 更多