Использовать struct и enum вместо class, где это возможно. Value types по умолчанию не используют динамическую диспетчеризацию.
Применять final к классам и методам, чтобы предотвратить наследование и переопределение, позволяя компилятору осуществлять прямую диспетчеризацию.
swift
Использовать протоколы с требованиями только static или final методов/свойств, или с дженериками, которые могут быть специализированы во время компиляции.
swift
Использовать private и fileprivate для методов и свойств внутри класса/структуры/enum. Это может позволить компилятору использовать более быструю диспетчеризацию, так как область видимости ограничена.
swift
Избегать частого использования общих протоколов в runtime, где конкретные типы заранее неизвестны, так как вызовы через протоколы используют виртуальную таблицу. Предпочитать дженерики там, где это возможно на этапе компиляции.
Использовать атрибут @inline(__always). Это подсказка компилятору попытаться встроить тело функции в место вызова, избегая накладных расходов на вызов функции. Не всегда дает выигрыш.
swift