### 2) Table Dispatch (динамическая, делится на Virtual Table и Witness Table

* Позволяет реализовать принцип [полиморфизма из ООП](/2%20ComputerScience/2.2%20Languages/2.2.2%20Paradigm/2.2.2.2%20Imperative/2.2.2.2.2%20OOP.md);
* Во время выполнения программы (**в runtime**) на основании типа объекта система вызывает метод;
* Появляются таблицы ссылок на методы;
* Каждый наследник имеет свою измененную копию таблицы;

Дает ряд преимуществ - можно работать с объектом производного типа как с объектом базового типа и использовать его везде, где требуется объект базового типа.

  1. **[Virtual table (для классов)](/5%20Swift/5.3%20DataRepresentations/5.3.1%20DataTypes/5.3.1.3%20ReferenceTypes/Class/)** - таблица, прикрепленная к классу, реализацию которой следует использовать для каждого переопределяемого метода в классе. В отличие от таблицы методов Objective-C, ключи виртуальной таблицы представляют собой просто смещения, что значительно упрощает поиск за счет динамизма и дублирования информации о непереопределенных методах.

  2. **[Witness table (для протоколов)](/5%20Swift/5.4%20Protocol/5.4.1%20Protocol.md)** - в [SIL](https://github.com/apple/swift/blob/main/docs/SIL.rst) в [Swift](/5%20Swift/5.1%20Swift.md) (и во время runtime) представление соответствия протоколу

      Cлово **Witness** - значение или тип, удовлетворяющий требованию протокола. Отсюда и название Witness Table.

---

[5.6.2 Static(direct) Dispatch Theme](./5.6.2%20Static(direct)Dispatch.md) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [5.6.4 Message Dispatch Theme](./5.6.4%20MessageDispatch.md)
