代码之家  ›  专栏  ›  技术社区  ›  calvinlough

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

  •  8
  • calvinlough  · 技术社区  · 16 年前

    这个问题纯粹是出于好奇。Cocoa如何定义ID类型?它只是void*的typedef吗?另外,如果您知道它是在哪个头文件中定义的,我将有兴趣查看一下。

    5 回复  |  直到 14 年前
        1
  •  23
  •   Azeem.Butt    16 年前

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

    typedef struct objc_class *Class;
    typedef struct objc_object {
        Class isa;
    } *id;
    
    
    typedef struct objc_selector    *SEL;    
    typedef id          (*IMP)(id, SEL, ...); 
    
        2
  •  7
  •   Mike    16 年前

    它是Delcared in /usr/include/objc/objc.h (关于美洲豹)如下:

    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

        3
  •  6
  •   Oren Trutner    16 年前

    在Obj.h中

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

    要自己查找,在Xcode中,右键单击 身份证件 --或任何其他类型--并选择 跳到定义 . 有趣的是,注意到与其他基于C/C++的对象系统的相似性;一个对象指针——一个ID——指向一个从指向共享类信息的点开始的结构。我有很多C++实现,那就是虚拟函数表,就像微软的COM一样。在cocoa中,objc_类的细节不会在头文件中显示给我们。

        4
  •  2
  •   caleb    16 年前

    这个 id 类型通常声明为:

    typedef struct objc_object *id;
    

    这是 批评的 对于objective-c++,其中类型是损坏函数名的一部分。

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

        5
  •  0
  •   Jason Lee    14 年前

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