Sobes.tech
Junior — Middle

Kuo skiriasi 'unowned' ir 'strong' raktinių žodžių naudojimas Swift kalboje nuorodų deklaravimui?

sobes.tech AI

Atsakymas iš AI

Swift kalbos strong ir unowned raktiniai žodžiai naudojami nuorodų valdymui ir išvengti išlaikymo ciklų (retain cycles).

  • strong — tai standartinė stipri nuoroda, kuri padidina objekto nuorodų skaitiklį. Kol yra bent viena stipri nuoroda, objektas nėra ištrinamas iš atminties.

  • unowned — tai silpna, bet ne pasirenkama nuoroda. Ji nepadidina nuorodų skaitiklio, bet daro prielaidą, kad nuoroda į objektą visada egzistuoja naudojimo metu. Jei objektas jau ištrintas, prieiga prie unowned nuorodos sukels vykdymo klaidą.

Pavyzdys:

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

Čia tenant deklaruotas kaip unowned, nes butas neturi laikyti žmogaus stiprią nuorodą, kad išvengtų ciklo, bet manoma, kad žmogus egzistuoja ilgiau nei butas.