Sobes.tech
Junior — Middle

Ce impact are utilizarea adnotării @objc dynamic în cod?

sobes.tech AI

Răspuns de la AI

A adnotare @objc dynamic în Swift îndeplinește două funcții principale:

  1. @objc — face ca o metodă sau o proprietate să fie accesibilă pentru runtime-ul Objective-C. Acest lucru este necesar dacă doriți să utilizați dispatching-ul dinamic, să interacționați cu API-uri Objective-C, cum ar fi KVO (Observarea Valoare-Cheie), selectori sau cod vechi.

  2. dynamic — forțează compilatorul să utilizeze dispatching-ul dinamic prin runtime-ul Objective-C, în loc de optimizări statice sau încorporate. Acest lucru permite, de exemplu, interceptarea apelurilor de metode, ceea ce este necesar pentru KVO.

Împreună, @objc dynamic sunt de obicei folosite pentru proprietăți și metode care trebuie să suporte observarea dinamică a schimbărilor (KVO) sau să fie accesibile din Objective-C.

Exemplu:

class Person: NSObject {
    @objc dynamic var name: String = ""
}

let person = Person()
var observation = person.observe(\.name, options: [.new]) { object, change in
    print("Numele s-a schimbat în \(change.newValue ?? "")")
}
person.name = "Ivan" // Activează observatorul

Fără @objc dynamic, KVO nu va funcționa, deoarece mecanismul se bazează pe runtime-ul Objective-C și dispatching-ul dinamic.