Middle
Jaké odkazy jsou v objektu sitetable?
sobes.tech AI
Odpověď od AI
Silné (strong), slabé (weak), bez vlastnictví (unowned).
- Silné: Vytváří vlastnictví objektu a zabraňuje jeho uvolnění, dokud existují silné odkazy.
- Slabé: Nevytváří vlastnictví. Pokud je objekt, na který odkazuje slabý odkaz, uvolněn, slabý odkaz se automaticky nastaví na nil. Používá se k prevenci cyklů silných odkazů, často pro odkazy na rodičovský objekt nebo delegáta.
- Bez vlastnictví: Nevytváří vlastnictví. Podobně jako slabý odkaz, ale zaručuje, že odkazovaný objekt bude existovat po celou dobu svého životního cyklu bez vlastnictví. Pokud se pokusíte přistoupit k objektu po jeho uvolnění, dojde k chybě za běhu (crash). Používá se, když objekty mají podobný nebo propojený životní cyklus a nil je přijatelný, ale neočekávaný.
// Příklad silného
class Parent {
var child: Child?
}
class Child {
var parent: Parent?
}
var parent: Parent? = Parent()
var child: Child? = Child()
parent?.child = child
child?.parent = parent // Vytváří cyklus silných odkazů
parent = nil // Rodič nebude uvolněn kvůli silnému odkazu od dítěte
child = nil // Dítě nebude uvolněno kvůli silnému odkazu od rodiče
// Příklad slabého
class ParentWeak {
var child: ChildWeak?
}
class ChildWeak {
weak var parent: ParentWeak? // Slabý odkaz
deinit {
print("ChildWeak uvolněn")
}
}
var parentWeak: ParentWeak? = ParentWeak()
var childWeak: ChildWeak? = ChildWeak()
parentWeak?.child = childWeak
childWeak?.parent = parentWeak
parentWeak = nil // ParentWeak uvolněn
// ChildWeak uvolněn
// Příklad bez vlastnictví
class ParentUnowned {
var child: ChildUnowned?
}
class ChildUnowned {
unowned var parent: ParentUnowned // Bez vlastnictví
init(parent: ParentUnowned) {
self.parent = parent
}
deinit {
print("ChildUnowned uvolněn")
}
}
var parentUnowned: ParentUnowned? = ParentUnowned()
var childUnowned: ChildUnowned? = ChildUnowned(parent: parentUnowned!) // ParentUnowned musí existovat
parentUnowned?.child = childUnowned
parentUnowned = nil // ParentUnowned a ChildUnowned jsou uvolněny