Junior — Middle
Použili ste vo svojich projektoch referenčné premenné typu Unowned?
sobes.tech AI
Odpoveď od AI
Áno, v iOS projektoch som používal referenčné premenné typu unowned.
unowned je typ slabého odkazu, ktorý nezvyšuje čítač odkazov, ale predpokladá, že odkazovaný objekt bude vždy existovať počas používania tejto referencie.
Toto je užitočné na prevenciu cyklov silných odkazov, napríklad v uzávierkach alebo pri vzájomných odkazoch medzi objektmi, keď jeden objekt zaručuje, že bude žiť dlhšie ako iný.
Príklad použitia unowned v uzávierke:
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
}
}
class Apartment {
let unit: String
unowned let tenant: Person
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
let john = Person(name: "John")
let apt = Apartment(unit: "4A", tenant: john)
john.apartment = apt
Tu, tenant je deklarovaný ako unowned, pretože byt nemá existovať bez nájomníka, čím sa zabraňuje cyklu silných odkazov.