Sobes.tech
Назад к вопросам
Junior — Middle
75

Каким образом использование аннотации @objc влияет на динамическую диспетчеризацию методов в Objective-C и Swift?

Ответ от нейросети

sobes.tech AI

Аннотация @objc в Swift указывает компилятору, что данный класс, метод или свойство должны быть доступны из Objective-C runtime. Это означает, что такие методы будут участвовать в динамической диспетчеризации через механизм Objective-C — вызовы методов будут разрешаться во время выполнения, а не во время компиляции.

Без @objc Swift использует статическую диспетчеризацию (например, для методов в структурах или final-классах), что повышает производительность, но ограничивает взаимодействие с Objective-C.

Пример:

class MyClass: NSObject {
    @objc func dynamicMethod() {
        print("Вызов через Objective-C runtime")
    }
}

let obj = MyClass()
let selector = #selector(MyClass.dynamicMethod)
if obj.responds(to: selector) {
    obj.perform(selector)
}

Здесь @objc позволяет вызвать метод через селектор, что возможно только при динамической диспетчеризации Objective-C.