Как модификатор `final` ускоряет выполнение кода в Swift?

«Как модификатор `final` ускоряет выполнение кода в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ключевое слово final отключает динамическую диспетчеризацию для класса, его методов или свойств, позволяя компилятору применять оптимизации.

Как это работает:

  1. Статическая диспетчеризация: Компилятор точно знает, какая реализация метода будет вызвана (так как переопределение невозможно). Это убирает необходимость поиска в таблице виртуальных методов (vtable) во время выполнения.
  2. Инлайнинг (Inlining): Компилятор может встроить тело final-метода прямо в место вызова, устраняя накладные расходы на вызов функции.

Пример:

final class NetworkManager {
    // Компилятор знает, что этот метод не будет переопределен
    func sendRequest() {
        // ... код запроса
    }
}

let manager = NetworkManager()
manager.sendRequest() // Вызов может быть оптимизирован или инлайнен

Когда использовать:

  • Для классов, которые заведомо не предназначены для наследования (например, утилитарные или фасадные классы).
  • В performance-critical коде, где важна максимальная скорость.

Осторожно: Необоснованное использование final ограничивает расширяемость и тестируемость кода.