Sobes.tech
Junior — Middle

Welke redenen maken het gebruik van Unowned minder geschikt in bepaalde situaties?

sobes.tech AI

Antwoord van AI

Het gebruik van unowned in iOS (Swift) wordt minder aanbevolen in situaties waarin het risico bestaat dat het object waarnaar wordt verwezen met unowned eerder kan worden vrijgegeven (deallocated) dan dat de verwijzing wordt gebruikt. In tegenstelling tot weak is unowned niet optioneel en wordt het niet nil bij het vrijgeven van het object, dus toegang tot zo'n verwijzing na de vrijgave zal leiden tot een crash van de applicatie (runtime error).

Redenen om unowned te vermijden:

  • Als de levenscyclus van het object niet garandeert dat de verwijzing altijd geldig zal zijn.
  • Bij complexe onderlinge verwijzingen, waar de volgorde van vrijgave van objecten niet duidelijk is.

In dergelijke gevallen is het beter om weak te gebruiken, dat automatisch nil wordt, waardoor onverwachte crashes worden voorkomen.

Voorbeeld:

class A {
    unowned var b: B
    init(b: B) { self.b = b }
}

class B {
    var a: A?
}

Als het object B eerder wordt vrijgegeven dan A, zal toegang tot b in A een fout veroorzaken.