DevPrep

Все темы › Objective-C

Что такое isa-указатель?

Senior PRO

Суть

isa — первое поле каждого объекта Objective-C: ссылка на его класс. Через неё objc_msgSend находит таблицу методов и кэш, а рантайм — список ivar, свойств и протоколов. У класса тоже есть isa — он указывает на метакласс, в котором лежат методы класса (+). Метаклассы замыкаются на метакласс корневого класса NSObject.

#import <Foundation/Foundation.h>
#import <objc/runtime.h>

static void inspect(void) {
    NSObject *obj = [NSObject new];
    Class cls = object_getClass(obj);      // NSObject
    Class meta = object_getClass(cls);     // метакласс NSObject
    BOOL isMeta = class_isMetaClass(meta); // YES
    NSLog(@"%@ %@ %d", cls, meta, isMeta);
}

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store