Sobes.tech
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.