Quel impact l'utilisation de l'annotation @objc dynamic a-t-elle dans le code?
sobes.tech IA
Réponse de l'IA
L’annotation @objc dynamic en Swift remplit deux fonctions principales:
-
@objc — rend une méthode ou une propriété accessible au runtime Objective-C. Cela est nécessaire si vous souhaitez utiliser la dispatching dynamique, interagir avec l’API Objective-C, comme KVO (Observation par Valeur Clé), les sélecteurs ou du code ancien.
-
dynamic — force le compilateur à utiliser la dispatching dynamique via le runtime Objective-C, plutôt que des optimisations statiques ou intégrées. Cela permet, par exemple, d’intercepter les appels de méthodes, ce qui est nécessaire pour KVO.
Ensemble, @objc dynamic est généralement utilisé pour des propriétés et méthodes qui doivent supporter l’observation dynamique des changements (KVO) ou être accessibles depuis Objective-C.
Exemple:
class Person: NSObject {
@objc dynamic var name: String = ""
}
let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
print("Le nom a changé en \(change.newValue ?? "")")
}
person.name = "Ivan" // Déclenche l’observateur
Sans @objc dynamic, KVO ne fonctionnera pas, car le mécanisme repose sur le runtime Objective-C et la dispatching dynamique.