Sobes.tech
Junior — Middle

Come influisce l'uso dell'annotazione @objc sul dispatching dinamico dei metodi in Objective-C e Swift?

sobes.tech AI

Risposta dell'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.