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