Junior — Middle
Použili jste ve svých projektech referenční proměnné typu Unowned?
sobes.tech AI
Odpověď od AI
Ano, v projektech iOS jsem používal referenční proměnné typu unowned.
unowned je typ slabé reference, který nezvyšuje čítač referencí, ale předpokládá, že odkazovaný objekt bude vždy existovat během používání této reference.
To je užitečné pro prevenci silných referenčních cyklů, například v uzávěrech nebo při vzájemných odkazech mezi objekty, když jeden objekt zaručuje, že bude žít déle než jiný.
Příklad použití unowned v uzávěru:
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
Zde je tenant deklarován jako unowned, protože byt nesmí existovat bez nájemce, což zabraňuje cyklu silných referencí.