在Cocoa中,如何定义id类型?

cal*_*ugh 9 cocoa

这个问题出于纯粹的好奇心.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)

  • 如果有任何可用的文件,选择双击将显示文档! (2认同)

Mik*_*ike 7

/usr/include/objc/objc.h(在Leopard上)如下:

typedef struct objc_object {
    Class isa;
} *id;
Run Code Online (Sandbox Code Playgroud)

这意味着它根本不是void *,而是指向包含单个成员的结构的指针,指向类定义.有趣的是.

我记得当我刚刚进入C并且学习Objective-C最初被实现为C之上的预处理器层时.它不再那样了.

关于这个主题的最佳阅读我发现:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html


Ore*_*ner 6

在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的详细信息不会在头文件中显示给我们.