objective-c - Why does class method of a class object does not return the meta class?
问题描述
The following code:
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));
produce:
NSObject 0
NSObject 0
NSObject 1
More than that [c isKindOfClass:c]
returns true
.
解决方案
meta1
是调用class
类型值的结果Class
,即调用调用类方法 ( + class
) - 类似地,调用[c alloc]
(在代码中赋值之后c
)将等效于[NSObject alloc]
.
的默认实现+ class
来自NSObject
并被定义为简单地返回调用它的类。因此,在示例代码中,两者都c
具有meta1
as valueNSObject
的Class
。
这告诉你为什么定义meta1
不是元类。如果您的问题是为什么按设计它不返回元类,那么最好向该语言的设计者之一提出不同的问题!
高温高压
推荐阅读
- java - 如何修复“与主机 localhost、端口 1433 的 TCP/IP 连接失败。”
- google-cloud-platform - GCP VM 上的 DNS_PROBE_FINISHED_NXDOMAIN 错误
- excel - 如何通过 Laravel 从 Excel 中的特定单元格地址获取值
- python - 如何将.npy(numpy)文件转换为.png文件,其中.npy数组形状(30,256,256)?
- rsa - 如何从部分暴露的私钥、公钥和纯文本密码样本中确定 RSA 的完整私钥(d)?
- vba - 使用 VS2017 自定义 Excel UI/功能区?
- java - 如何在打印日志时始终避免打印记录器主类名称?
- javascript - 如何使图像在div中保持纵横比
- jquery - 如何在 fb:login-button 上应用自定义 CSS?
- android - 为什么我的代码没有读取接收方聊天?