开发者

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;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜