Ответ
Direct Dispatch, или статическая диспетчеризация. Нужную реализацию выбирают на этапе компиляции и сразу делают прямой вызов метода.
Достоинства:
- Самый быстрый вид диспетчеризации. В рантайме метод не ищут, его сразу вызывают.
Недостатки:
- Реализацию нельзя выбрать во время выполнения. Например, метод не переопределить в наследнике, как через virtual table.
Так работают методы, которые нельзя подменить другой реализацией:
- Методы
structиenum. У них нет наследования иoverride, как у классов. finalметоды и методыfinal class. Их нельзя переопределить.- Методы с
private. Снаружи их все равно не переопределить. staticметоды. Их тоже нельзя переопределить черезoverride.- Обычные функции, не привязанные к типу. Это прямой вызов конкретной функции.
- Методы только в
extensionпротокола, если их нет в самом протоколе. Это не требование, в witness table нет ячейки для этого метода. - Методы из
extensionуstruct,enumиclassбез@objc. Их тоже нельзя переопределить.