Что такое Table Dispatch в Swift?

«Что такое Table Dispatch в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Table Dispatch (диспетчеризация через таблицу) — это механизм динамического вызова методов в Swift, использующий таблицу виртуальных методов (vtable) для определения вызываемой реализации во время выполнения.

Как работает:

  • Для каждого класса компилятор создает таблицу с указателями на его методы.
  • При вызове метода система ищет реализацию в таблице, соответствующей динамическому типу объекта.
  • Наследование расширяет таблицу: добавляются новые методы или переопределяются унаследованные.

Ключевые особенности:

  • Применяется по умолчанию для методов классов (не структур или перечислений).
  • Баланс между производительностью и гибкостью: медленнее, чем Direct Dispatch, но быстрее, чем Message Dispatch.
  • Оптимизатор может заменить на Direct Dispatch для final классов или методов.

Пример:

class Parent {
    func show() { print("Parent") } // Table dispatch
}

class Child: Parent {
    override func show() { print("Child") } // Запись в таблице переопределена
}

let instance: Parent = Child()
instance.show() // Во время выполнения через таблицу определяется вызов Child.show()

Почему используется: Обеспечивает полиморфное поведение, необходимое для наследования и переопределения методов.