Welche Auswirkung hat die Verwendung der Annotation @objc dynamic im Code?
sobes.tech KI
Antwort von AI
Die Annotation @objc dynamic in Swift erfüllt zwei Hauptfunktionen:
-
@objc — macht eine Methode oder Eigenschaft für die Objective-C-Laufzeit verfügbar. Dies ist notwendig, wenn du dynamische Dispatching verwenden möchtest, mit Objective-C-APIs interagieren willst, wie z.B. KVO (Key-Value Observing), Selektoren oder alten Code.
-
dynamic — zwingt den Compiler, die dynamische Dispatching über die Objective-C-Laufzeit zu verwenden, anstatt statische oder eingebettete Optimierungen. Das ermöglicht z.B., Methodenaufrufe abzufangen, was für KVO notwendig ist.
Gemeinsam werden @objc dynamic meist für Eigenschaften und Methoden verwendet, die die dynamische Beobachtung von Änderungen (KVO) unterstützen oder aus Objective-C zugänglich sein sollen.
Beispiel:
class Person: NSObject {
@objc dynamic var name: String = ""
}
let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
print("Der Name hat sich geändert auf \(change.newValue ?? "")")
}
person.name = "Ivan" // löst den Beobachter aus
Ohne @objc dynamic funktioniert KVO nicht, da der Mechanismus auf dem Objective-C-Laufzeit- und der dynamischen Dispatching basiert.