Sobes.tech
Junior — Middle

¿Cómo afecta el uso de la anotación @objc a la despacho dinámico de métodos en Objective-C y Swift?

sobes.tech AI

Respuesta de la IA

Аннотация @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.