为什么 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。所以在示例代码中,c
和 meta1
的值都是 NSObject
的 Class
.
这告诉你为什么定义 meta1
不是 meta class。如果你的问题是为什么设计不 return 元 class 那么这是一个不同的问题,最好问语言的设计者之一!
HTH
以下代码:
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。所以在示例代码中,c
和 meta1
的值都是 NSObject
的 Class
.
这告诉你为什么定义 meta1
不是 meta class。如果你的问题是为什么设计不 return 元 class 那么这是一个不同的问题,最好问语言的设计者之一!
HTH