Why aren't objects of type 'id' initialized as pointers with a '*' in Objective-C?
If I'm using Objective-C, here's how I declare an initialize an int:
int a = 1;
vs an object:
myObj *a = [[myObj alloc] init];
So this is a pointer to an object as denoted by the '*'. My question is, why aren't objects of type id declared this way? I.e., why is it this:
id genericObj;
开发者_JAVA百科
and not:
id *genericObj;
?
Because id is defined as:
typedef struct objc_object {
Class isa;
} *id;
So it's already a pointer.
Because id
means identifier. Identifier, like pointer, identifies the object. Identifier isn't the object itself.
You can always treat it as typedef <some-mysterious-root-type>* id
if you want.
Pavel's answer is correct. Specifically, the "<mysterious-root-type> " is declared in objc.h as:
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
精彩评论