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