为什么 class 对象的 class 方法没有 return 元 class?

Why does class method of a class object does not return the meta class?

以下代码:

  NSObject *a = [[NSObject alloc] init];
  Class c = [a class];
  Class meta1 = [[a class] class];
  Class meta2 = objc_getMetaClass("NSObject");
  NSLog(@"%@ %d", c, class_isMetaClass(c));
  NSLog(@"%@ %d", meta1, class_isMetaClass(meta1));
  NSLog(@"%@ %d", meta2, class_isMetaClass(meta2));

产出:

NSObject 0
NSObject 0
NSObject 1

不止[c isKindOfClass:c]returnstrue.

meta1 是对 Class 类型的值调用 class 的结果,即调用调用 class 方法 (+ class) –类似地,调用 [c alloc](在代码中分配给 c 之后)将等同于 [NSObject alloc].

+ class 的默认实现来自 NSObject 并且是 defined 简单地 return 它被调用的 class。所以在示例代码中,cmeta1 的值都是 NSObjectClass.

这告诉你为什么定义 meta1 不是 meta class。如果你的问题是为什么设计不 return 元 class 那么这是一个不同的问题,最好问语言的设计者之一!

HTH