Welke impact heeft het gebruik van de annotatie @objc dynamic in de code?
sobes.tech AI
Antwoord van AI
De annotatie @objc dynamic in Swift vervult twee hoofdrollen:
-
@objc — maakt een methode of eigenschap toegankelijk voor de Objective-C runtime. Dit is nodig als je dynamische dispatching wilt gebruiken, wilt samenwerken met Objective-C API's zoals KVO (Key-Value Observing), selectors of oude code.
-
dynamic — dwingt de compiler om gebruik te maken van dynamische dispatching via de Objective-C runtime, in plaats van statische of ingebedde optimalisaties. Dit maakt bijvoorbeeld het onderscheppen van method calls mogelijk, wat nodig is voor KVO.
Samen worden @objc dynamic meestal gebruikt voor eigenschappen en methoden die dynamisch observatie van veranderingen (KVO) moeten ondersteunen of toegankelijk moeten zijn vanuit Objective-C.
Voorbeeld:
class Person: NSObject {
@objc dynamic var name: String = ""
}
let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
print("Naam veranderd naar \(change.newValue ?? "")")
}
person.name = "Ivan" // Activeert de observer
Zonder @objc dynamic zal KVO niet werken, omdat het mechanisme gebaseerd is op de Objective-C runtime en dynamische dispatching.