Junior — Middle
Aké dôvody robia použitie Unowned menej preferovaným v určitých situáciách?
sobes.tech AI
Odpoveď od AI
Použitie unowned v iOS (Swift) je mene odporúčané v situáciách, keď existuje riziko, že objekt, na ktorý sa odkazuje s unowned, môže byť skôr uvoľnený (deallocated), než bude odkaz použitý. Na rozdiel od weak nie je unowned voliteľný a pri uvoľnení objektu sa nestáva nil, takže prístup k takému odkazu po uvoľnení spôsobí zlyhanie aplikácie (runtime error).
Dôvody na vyhýbanie sa unowned:
- Ak životný cyklus objektu nezaručuje, že odkaz bude vždy platný.
- Pri zložitých vzájomných odkazoch, kde nie je jasný poradie uvoľnenia objektov.
V takých prípadoch je lepšie použiť weak, ktorý sa automaticky stáva nil, čím sa predchádza neočakávanému zrúteniu.
Príklad:
class A {
unowned var b: B
init(b: B) { self.b = b }
}
class B {
var a: A?
}
Ak je objekt B uvoľnený skôr než A, prístup k b v A spôsobí chybu.