Sobes.tech
Junior — Middle

Care este diferența dintre utilizarea cuvintelor cheie 'unowned' și 'strong' la declararea referințelor în Swift?

sobes.tech AI

Răspuns de la AI

În Swift, cuvintele cheie strong și unowned sunt utilizate pentru gestionarea referințelor și prevenirea ciclurilor de retenție (retain cycles).

  • strong — este o referință puternică standard care crește contorul de referințe al obiectului. Atâta timp cât există cel puțin o referință puternică, obiectul nu va fi eliminat din memorie.

  • unowned — este o referință slabă, dar non-opțională. Nu crește contorul de referințe, dar presupune că obiectul la care se face referire există întotdeauna în timpul utilizării acestei referințe. Dacă obiectul a fost deja eliminat, accesarea referinței unowned va duce la o eroare în timpul execuției.

Exemplu:

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

Aici, tenant este declarat ca unowned deoarece apartamentul nu trebuie să rețină persoana cu o referință puternică pentru a evita un ciclu, dar se presupune că persoana există mai mult timp decât apartamentul.