Sobes.tech
Junior — Middle

Aký je rozdiel medzi používaním kľúčových slov 'unowned' a 'strong' pri deklarovaní odkazov v Swift?

sobes.tech AI

Odpoveď od AI

V Swift-e sa kľúčovými slovami strong a unowned sa spravujú odkazy a predchádza sa cyklom udržiavania (retain cycles).

  • strong — je štandardný silný odkaz, ktorý zvyšuje čítač odkazov objektu. Pokiaľ existuje aspoň jeden silný odkaz, objekt nebude odstránený z pamäti.

  • unowned — je slabý, ale nie voliteľný odkaz. Nezvyšuje čítač odkazov, ale predpokladá, že odkazovaný objekt vždy existuje počas používania tohto odkazu. Ak je objekt už odstránený, prístup k unowned odkazu spôsobí chybu počas behu.

Príklad:

class Person {
    var apartment: Apartment?
}

class Apartment {
    unowned let tenant: Person
    init(tenant: Person) {
        self.tenant = tenant
    }
}

let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt

Tu je tenant deklarovaný ako unowned, pretože byt nemá držať osobu silným odkazom, aby sa predišlo cyklu, ale predpokladá sa, že osoba existuje dlhšie ako byt.