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