Junior — Middle
Comment l'utilisation de l'annotation @objc influence-t-elle la dispatching dynamique des méthodes en Objective-C et Swift?
sobes.tech IA
Réponse de l'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.