Sobes.tech
Junior

Čo je weak modifikátor pamäte v Swift?

sobes.tech AI

Odpoveď od AI

Modifikátor weak sa využíva na prerušovanie cyklov silných odkazov medzi objektmi, keď jeden objekt má silnú referenciu na iný, a tento má zase silnú referenciu späť.

Hlavné vlastnosti weak:

  • Nezvyšuje počet odkazov: Použitie weak nezvyšuje počet silných odkazov na objekt.
  • Môže byť nil: Slabá referencia je voliteľná (Optional) a automaticky sa stáva nil, keď je objekt, na ktorý odkazuje, deinitializovaný.
  • Používa sa pre vzťahy rodič/dieťa: Často sa aplikuje, keď má dieťa objekt odkaz na svojho rodiča, aby sa predišlo cyklom silných odkazov.
  • Musí byť deklarovaná ako var: Pretože slabá referencia môže byť nil, musí byť premenná (var), nie konštanta (let).

Príklad použitia:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("\(name) sa inicializuje")
    }

    deinit {
        print("\(name) sa deinitializuje")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Slabá referencia

    init(unit: String) {
        self.unit = unit
        print("Byt \(unit) sa inicializuje")
    }

    deinit {
        print("Byt \(unit) sa deinitializuje")
    }
}

Bez weak var tenant: Person? v triede Apartment, by vznikol cyklus silných odkazov, a inštancie Person a Apartment by neboli deinitializované, keď na ne už neukazujú žiadne iné silné odkazy. Vďaka weak sa pri deinitializácii inštancie Person, referencia tenant v inštancii Apartment automaticky stáva nil.