Существует три основных типа диспетчеризации методов в Swift:
Прямая диспетчеризация (Direct Dispatch): Самая быстрая. Компилятор точно знает, какой метод вызвать во время компиляции. Используется по умолчанию для структур, классов с final-методами, приватных методов.
swift
Диспетчеризация по таблице (Table Dispatch): Используется для методов классов (не final). Каждый класс имеет таблицу виртуальных методов (vtable), где каждый метод имеет уникальный индекс. Компилятор обращается к vtable во время выполнения, чтобы найти нужную реализацию метода. Позволяет полиморфизм.
swift
Диспетчеризация через сообщения (Message Dispatch): Самая гибкая, но самая медленная. Используется для методов objc (помеченных @objc dynamic). Система Objective-C во время выполнения ищет реализацию метода по его имени (селектору).
swift
| Тип диспетчеризации | Скорость | Гибкость (полиморфизм, динамизм) | Где применяется по умолчанию |
|---|---|---|---|
| Прямая | Быстрая | Низкая | Структуры, final-классы/методы, private |
| По таблице | Средняя | Средняя | Методы классов |
| Через сообщения | Медленная | Высокая | @objc dynamic методы (Objective-C) |