Многие разработчики Objective-C, как начинающие, так и опытные, как представляется, считают id как будто это какой-то магический тип catch-all, который вы можете передать объекту и отправить любое старое сообщение без последствий (из компилятора, как минимум). Но, когда вы действительно смотрите определение id, это не более чем указатель на objc_object. Таким образом, это буквально "объект Objective-C", но ничто не может "спуститься" с id. Даже заголовок NSObject выглядит не так:
@interface NSObject : id
Он просто читает:
@interface NSObject
Теперь я твердо уверен, что нейтральный тип id является побочным эффектом его реализации, но поскольку есть те, которые все еще думают иначе, я должен спросить:
Что такое первичная функция типа id?