为什么类对象的类方法不返回元类?

问题描述 投票:0回答:1

以下代码:

  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]返回true

objective-c objective-c-runtime
1个回答
0
投票

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

+ class的默认实现来自NSObject,并且是defined以仅返回被调用的类。因此,在示例代码中,cmeta1的值均为NSObjectClass

这告诉您为什么按定义meta1不是元类。如果您的问题是按设计原因而不返回元类,那么最好是该语言的一位设计师提出的另一个问题!

HTH

© www.soinside.com 2019 - 2024. All rights reserved.