7. Что такое Direct Dispatch и какие у него есть достоинства и недостатки?

Темы

Компании

Ответ

Direct Dispatch, или статическая диспетчеризация. Нужную реализацию выбирают на этапе компиляции и сразу делают прямой вызов метода.

Достоинства:

  • Самый быстрый вид диспетчеризации. В рантайме метод не ищут, его сразу вызывают.

Недостатки:

  • Реализацию нельзя выбрать во время выполнения. Например, метод не переопределить в наследнике, как через virtual table.

Так работают методы, которые нельзя подменить другой реализацией:

  • Методы struct и enum. У них нет наследования и override, как у классов.
  • final методы и методы final class. Их нельзя переопределить.
  • Методы с private. Снаружи их все равно не переопределить.
  • static методы. Их тоже нельзя переопределить через override.
  • Обычные функции, не привязанные к типу. Это прямой вызов конкретной функции.
  • Методы только в extension протокола, если их нет в самом протоколе. Это не требование, в witness table нет ячейки для этого метода.
  • Методы из extension у struct, enum и class без @objc. Их тоже нельзя переопределить.