Junior — Middle
Koji razlozi čine korišćenje Unowned manje poželjnim u određenim situacijama?
sobes.tech АИ
Одговор од АИ
Koršćenje unowned u iOS (Swift) je manje preporučljivo u situacijama kada postoji rizik da objekat na koji se odnosi unowned može biti oslobođen (deallocated) pre nego što se referenca koristi. Za razliku od weak, unowned nije opcionalan i ne postaje nil kada se objekat oslobađa, pa će pristup takvoj referenci nakon oslobađanja izazvati grešku u izvršenju (runtime error).
Razlozi za izbegavanje unowned:
- Ako životni ciklus objekta ne garantuje da će referenca uvek biti validna.
- Kod složenih uzajamnih referenci, gde redosled oslobađanja objekata nije jasan.
U takvim slučajevima, bolje je koristiti weak, koji automatski postaje nil, čime se sprečava neočekivani pad aplikacije.
Primer:
class A {
unowned var b: B
init(b: B) { self.b = b }
}
class B {
var a: A?
}
Ako je objekat B oslobođen pre A, pristup b u A će izazvati grešku.