В Какао, как идентификационный тип определяется?

Этот вопрос вне чистого любопытства. Как Какао определяет идентификационный тип? Это - просто определение типа для пустоты *? Кроме того, если Вы знаете, в каком заголовочном файле это определяется, я интересовался бы взглядом.

9
задан calvinlough 2 January 2010 в 05:36
поделиться

4 ответа

Удерживая клавишу управления, дважды щелкните по любому выделенному термину, чтобы перейти к его определению.

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


typedef struct objc_selector    *SEL;    
typedef id          (*IMP)(id, SEL, ...); 
23
ответ дан 4 December 2019 в 06:26
поделиться

В /usr/include/objc/objc.h (о Leopard) это выглядит следующим образом:

typedef struct objc_object {
    Class isa;
} *id;

Что означает, что это вовсе не пустота *, а указатель на структуру, которая содержит один член, указывающий на определение класса. Действительно интересно.

Помню, когда я только заходил в Си и узнал, что Objective-C изначально была реализована в виде слоя препроцессора поверх C. Это уже не совсем так.

Лучшее чтение по найденной мною теме:

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

7
ответ дан 4 December 2019 в 06:26
поделиться

в объекте objc.h

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

Чтобы самостоятельно узнать в XCode, щелкните правой кнопкой мыши на id -- или любом другом типе -- и выберите и перейдите к определению . Интересно отметить сходство с другими системами объектов на Си/Си++; указатель объекта -- a id -- указывает на структуру, которая начинается с точки доступа к общей информации о классе. У меня много реализаций на Си++, это была бы таблица виртуальных функций, как это было бы с Microsoft's COM. В Cocoa подробности objc_class не раскрываются в заголовочном файле

.
6
ответ дан 4 December 2019 в 06:26
поделиться

Тип id обычно объявляется как:

typedef struct objc_object *id;

Это критический для Objective-C++, где тип является частью искаженного имени функции.

Вы можете посмотреть в /usr/include/objc/objc.h

.
2
ответ дан 4 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: