Junior — Middle
Jaké důvody činí použití Unowned méně preferovaným v určitých situacích?
sobes.tech AI
Odpověď od AI
Použití unowned v iOS (Swift) je méně preferované v situacích, kdy existuje riziko, že objekt, na který odkazuje unowned, může být dříve uvolněn (deallocated), než bude odkaz použit. Na rozdíl od weak není unowned volitelný a při uvolnění objektu se nestává nil, takže přístup k takovému odkazu po uvolnění povede k chybě za běhu (runtime error).
Důvody, proč se vyhnout unowned:
- Pokud životní cyklus objektu nezaručuje, že odkaz bude vždy platný.
- U složitých vzájemných odkazů, kde není jasný pořadí uvolnění objektů.
V takových případech je lepší použít weak, který se automaticky stává nil, čímž se předchází neočekávanému pádu.
Příklad:
class A {
unowned var b: B
init(b: B) { self.b = b }
}
class B {
var a: A?
}
Pokud je objekt B uvolněn dříve než A, přístup k b v A způsobí chybu.