«Под капотом», так сказать, все объекты Objective-C являются структурами C с указателем на объект Class, который представляет их тип. id
- это указатель на самую базовую такую структуру, которая выглядит примерно так:
struct objc_object {
Class isa;
}
id
специально обрабатывается компилятором, поскольку компилятор не выдает никаких предупреждений о том, что объект может не реагировать ни на один селектор, как это происходит при использовании более строго типизированной переменной.
Когда вы вызываете метод для любого объекта, из этого следует, что isa
указывает на объект Class и просматривает этот объект Class, чтобы найти функцию реализации для селектора метода, который вы пытались вызвать.