Проверяет знание механизмов вызова методов в Swift: статический и динамический диспетчеринг.
Swift поддерживает:
Static dispatch (через struct, enum, final, protocol extensions)
Dynamic dispatch (через классы и @objc)
Table dispatch (vtable) — по умолчанию в классах
Message dispatch — через Objective-C runtime
Static dispatch (время компиляции)
Используется для struct, enum, final class.
Быстрее, так как метод известен заранее.
Пример:
struct A {
func run() {}
}Dynamic dispatch (во время выполнения)
Используется в обычных классах.
Работает через vtable (виртуальная таблица методов).
Пример:
class A {
func run() {}
}Message dispatch (@objc)
Использует Objective-C runtime.
Методы вызываются по селекторам.
Медленнее, но необходим для взаимодействия с UIKit и KVO.
Пример:
class A: NSObject {
@objc func run() {}
}