Почему объекты типа 'id' не инициализируются как указатели с '*' в Objective-C? - PullRequest
1 голос
/ 27 ноября 2009

Если я использую Objective-C, вот как я объявляю инициализацию типа int:

int a = 1;

против объекта:

myObj *a = [[myObj alloc] init];

Так что это указатель на объект, обозначаемый символом *. Мой вопрос: почему объекты типа id не объявлены таким образом? Т.е. почему это так:

id genericObj;

а не:

id *genericObj;

Ответы [ 3 ]

14 голосов
/ 27 ноября 2009

Поскольку идентификатор определяется как:

typedef struct objc_object {
    Class isa;
} *id;

Так что это уже указатель.

3 голосов
/ 27 ноября 2009

Павел отвечает правильно. В частности, «» объявлен в objc.h как:

typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id;
3 голосов
/ 27 ноября 2009

Потому что id означает идентификатор. Идентификатор, как указатель, идентифицирует объект. Идентификатор не сам объект.

Вы всегда можете рассматривать его как typedef <some-mysterious-root-type>* id, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...