Swift использует три механизма dispatch методов, каждый из которых имеет разные характеристики производительности и области применения.
Static dispatch (также называется direct dispatch) — это самый быстрый механизм. Компилятор разрешает вызов метода во время компиляции, что позволяет применять оптимизации вроде inlining.
struct, enum и final classTable dispatch использует vtable (таблицу виртуальных методов) — массив указателей на функции, разрешаемый в runtime.
classclass Animal {
func speak() { } // разрешается через vtable в runtime
}
Message dispatch полагается на Objective-C runtime и является самым медленным механизмом.
@objc dynamicstatic → самый быстрый, разрешается во время компиляцииtable → средние затраты, поиск в vtable в runtimemessage → наибольшие затраты, полное разрешение в runtimeВыбор правильного механизма dispatch напрямую влияет на производительность. Предпочитай static dispatch для value types и кода, критичного к производительности. Используй table dispatch для стандартных иерархий классов. Применяй message dispatch только когда явно требуется динамическое поведение runtime или совместимость с Objective-C.
Статическая диспетчеризация доступна для методов struct и enum, потому что компилятор может разрешить вызов метода на этапе компиляции, что позволяет применять оптимизации вроде inlining.
Новый — ещё не проверен сообществом
Вы