In Cocoa, how is the id type defined?

后端 未结 5 956
孤独总比滥情好
孤独总比滥情好 2020-12-09 06:02

This question is out of pure curiosity. How does Cocoa define the id type? Is it just a typedef for a void *? Also, if you know which header file it is defined in, I would b

相关标签:
5条回答
  • 2020-12-09 06:19

    in objc.h

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

    To find out on your own, in XCode, right click id -- or any other type -- and select Jump to definition. It's interesting to note the similarities to other C/C++ based object systems; an object pointer -- an id -- points to a struct that starts with a point to shared class information. I many C++ implementations, that would be the virtual function table, as it would be with Microsoft's COM. In Cocoa, the particulars of objc_class aren't revealed to us in the header file.

    0 讨论(0)
  • 2020-12-09 06:22

    Hold down the command key and double click on any highlighted term to jump to its definition.

    typedef struct objc_class *Class;
    typedef struct objc_object {
        Class isa;
    } *id;
    
    
    typedef struct objc_selector    *SEL;    
    typedef id          (*IMP)(id, SEL, ...); 
    
    0 讨论(0)
  • 2020-12-09 06:22

    You can refer the doc here : http://opensource.apple.com/source/objc4/objc4-437/runtime/objc.h Hope this will do a favor for you

    0 讨论(0)
  • 2020-12-09 06:26

    It is delcared in /usr/include/objc/objc.h (on Leopard) as follows:

    typedef struct objc_object {
        Class isa;
    } *id;
    

    Which means it is not void * at all, but rather a pointer to a struct that contains a single member, pointing at the class definition. Interesting indeed.

    I remember when I was just getting into C and learning that Objective-C was initially implemented as just a preprocessor layer on top of C. It isn't quite like that anymore.

    The best reading on the topic I've found:

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

    0 讨论(0)
  • 2020-12-09 06:34

    The id type is generally declared like:

    typedef struct objc_object *id;
    

    This is critical for Objective-C++ where the type is part of a mangled function name.

    You can take a look in /usr/include/objc/objc.h

    0 讨论(0)
提交回复
热议问题