Это отрывок из Objective-C runtime programming guide
:Понимание Objective-C во время выполнения
Когда создается новый объект, память для него выделяется, и его переменные экземпляра инициализируются. Первым среди переменных объекта является указатель на его структуру классов. Этот указатель, называемый isa, предоставляет объекту доступ к его классу и через класс ко всем классам, на которые он наследует.
иша объявлен в NSObject
так:
Class isa;
В свою очередь Class
ничего больше, чем указатель на структуру
typedef struct objc_class *Class;
А теперь давайте посмотрим на эту структуру:
struct objc_class {
Class isa;
#if !__OBJC2__
Class super_class OBJC2_UNAVAILABLE;
const char *name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
struct objc_cache *cache OBJC2_UNAVAILABLE;
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
#endif
}
Мы видим, что указатель на суперкласс (как и все остальные члены структуры, кроме другого) isas недоступен в последней версии Objective-C.
Итак, мой вопрос в том, как объект может получить доступ к его суперклассу, если указатель super_class
не доступен? Получает ли доступ к суперклассу через этот другой указатель? Но как это происходит? Как это работает? Может ли кто-нибудь объяснить это?
Где вы нашли это определение? Этот заголовочный файл показывает другое: http://www.opensource.apple.com/source/objc4/objc4-208/runtime/objc-class.h – trojanfoe
Я нашел его в objc/runtime.h –
это зависит от версия исполнения я думаю –