Ответ
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()
Почему используется: Обеспечивает полиморфное поведение, необходимое для наследования и переопределения методов.