Junior — Middle
Jak správně organizovat odkazy v objektovém modelu, aby se zabránilo cyklickému zadržování paměti?
sobes.tech AI
Odpověď od AI
Abyste zabránili cyklům zadržování paměti v objektovém modelu na iOS (použitím Swift nebo Objective-C), je důležité správně používat silné (strong), slabé (weak) a bez vlastnictví (unowned) odkazy.
Hlavní myšlenka:
- strong — vlastnický odkaz, zvyšuje čítač odkazů objektu.
- weak — ne vlastnický odkaz, nezvyšuje čítač, automaticky se nastaví na nil při odstranění objektu.
- unowned — ne vlastnický odkaz, nezvyšuje čítač, ale není nastavován na nil, používá se, když je zaručeno, že objekt bude žít déle.
Často vznikají cykly, například mezi rodičem a potomkem nebo mezi delegátem a objektem. Abychom se cyklům vyhnuli:
- Rodič drží potomka přes strong.
- Potomek odkazuje na rodiče přes weak nebo unowned.
Příklad v Swift:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // slabý odkaz, aby se předešlo cyklu
}
let parent = Parent()
let child = Child()
parent.child = child
child.parent = parent
Tímto způsobem se paměť správně uvolní, když parent a child přestanou být používány, bez cyklů a úniků paměti.