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
unownednuorodos 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.