6. Какие виды диспетчеризации методов есть в Swift?

Темы

Компании

Ответ

Диспетчеризацию методов можно разделить на два типа:

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

Динамическая диспетчеризация в свою очередь делится на:

  • Virtual Table. У каждого класса есть таблица с адресами методов, и все его экземпляры смотрят в нее. Если метод переопределен, в таблице наследника адрес заменяется на новую реализацию.
  • Witness Table. Таблица для пары тип + протокол. По ней ищут реализацию требования, если вызов идет через тип протокола.
  • Message Dispatch. Поиск метода по селектору в runtime Objective-C, например у методов с @objc dynamic.