Назад к вопросам
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.