这个问题出于纯粹的好奇心.Cocoa如何定义id类型?它只是一个void*的typedef吗?另外,如果你知道它定义了哪个头文件,我会有兴趣看看.
Aze*_*utt 23
按住命令键并双击任何突出显示的术语以跳转到其定义.
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
typedef struct objc_selector *SEL;
typedef id (*IMP)(id, SEL, ...);
Run Code Online (Sandbox Code Playgroud)
它/usr/include/objc/objc.h
(在Leopard上)如下:
typedef struct objc_object {
Class isa;
} *id;
Run Code Online (Sandbox Code Playgroud)
这意味着它根本不是void *
,而是指向包含单个成员的结构的指针,指向类定义.有趣的是.
我记得当我刚刚进入C并且学习Objective-C最初被实现为C之上的预处理器层时.它不再那样了.
关于这个主题的最佳阅读我发现:
在objc.h中
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
Run Code Online (Sandbox Code Playgroud)
要在XCode中自行查找,请右键单击id - 或任何其他类型 - 并选择Jump to definition.有趣的是要注意与其他基于C/C++的对象系统的相似之处; 对象指针 - 一个id - 指向以指向共享类信息的点开头的结构.我很多C++实现,它将是虚拟功能表,就像微软的COM一样.在Cocoa中,objc_class的详细信息不会在头文件中显示给我们.
归档时间: |
|
查看次数: |
5776 次 |
最近记录: |