Mi a különbség az 'unowned' és a 'strong' kulcsszavak használata között Swiftben történő hivatkozások deklarálásakor?
sobes.tech MI
Válasz az MI-től
Swiftben a strong és unowned kulcsszavakat referenciák kezelésére és a tartási ciklusok (retain cycles) megelőzésére használják.
-
strong — ez egy alapértelmezett erős hivatkozás, amely növeli az objektum referencsszámát. Amíg legalább egy erős hivatkozás létezik, az objektum nem kerül törlésre a memóriából.
-
unowned — ez egy gyenge, de nem opcionális hivatkozás. Nem növeli a referencsszámot, de feltételezi, hogy a hivatkozott objektum mindig létezik a használat során. Ha az objektum már törlésre került, az
unownedhivatkozás elérése futási hibát eredményez.
Példa:
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
Itt az tenant unowned-ként van deklarálva, mert a lakásnak nem szabad erős hivatkozással tartania a személyt, hogy elkerüljék a ciklust, de feltételezzük, hogy a személy hosszabb ideig létezik, mint a lakás.