Тип id
Суть
id — указатель на любой объект Objective-C (технически struct objc_object *; звёздочка уже включена в тип). Это «динамический тип»: с переменной id компилятор разрешает послать любой селектор, известный хотя бы в одном импортированном заголовке, и не требует приведения при присваивании в любой другой объектный тип и обратно. nil — нулевое значение id.
#import <Foundation/Foundation.h>
static void demo(NSArray *items) {
id first = items.firstObject; // тип неизвестен до рантайма
if ([first isKindOfClass:[NSString class]]) {
NSString *s = first; // неявное приведение, без cast
NSLog(@"%lu", (unsigned long)s.length);
}
id<NSCopying> key = @"k"; // id, ограниченный протоколом
NSDictionary *d = @{key: @1};
NSLog(@"%@", d);
}
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep