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

时间:2010-01-02 05:36:25

标签: cocoa

这个问题出于纯粹的好奇心。 Cocoa如何定义id类型?它只是一个void *的typedef吗?另外,如果你知道它定义了哪个头文件,我会有兴趣看看。

5 个答案:

答案 0 :(得分:23)

按住命令键并双击任何突出显示的术语以跳转到其定义。

typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id;


typedef struct objc_selector    *SEL;    
typedef id          (*IMP)(id, SEL, ...); 

答案 1 :(得分:7)

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

typedef struct objc_object {
    Class isa;
} *id;

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

我记得当我刚刚进入C并且了解到Objective-C最初只是作为C之上的预处理器层实现的。它不再那样了。

关于我发现的主题的最佳读物:

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

答案 2 :(得分:6)

在objc.h中

typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id;

要自行查找,请在XCode中右键单击 id - 或任何其他类型 - 然后选择跳转到定义。有趣的是要注意与其他基于C / C ++的对象系统的相似之处;对象指针 - 一个id - 指向以指向共享类信息的点开头的结构。我很多C ++实现,它将是虚拟功能表,就像微软的COM一样。在Cocoa中,objc_class的详细信息不会在头文件中显示给我们。

答案 3 :(得分:2)

id类型通常声明为:

typedef struct objc_object *id;

对于Objective-C ++,这是 critical ,其中类型是受损函数名称的一部分。

您可以查看/usr/include/objc/objc.h

答案 4 :(得分:0)

您可以在此处参考文档:http://opensource.apple.com/source/objc4/objc4-437/runtime/objc.h 希望这会对你有所帮助