Sobes.tech
Junior — Middle

Kunt u uitleggen wat er wordt bedoeld met de term 'Unowned' in de context van geheugenbeheer?

sobes.tech AI

Antwoord van AI

In de context van geheugenbeheer in iOS (en Swift) betekent de term "Unowned" een zwakke verwijzing naar een object die de referentieteller (retain count) niet verhoogt, maar ervan uitgaat dat het object bestaat tijdens het gebruik van die verwijzing.

Verschillen met weak:

  • weak verwijzingen kunnen nil worden als het object wordt verwijderd, en worden daarom als optioneel gedeclareerd.
  • unowned verwijzingen zijn niet optioneel en worden niet automatisch op nil gezet. Als het object waarnaar unowned wordt verwezen wordt verwijderd, leidt een poging tot toegang tot een runtime-fout (crash).

Gebruikt wanneer wordt gegarandeerd dat de levensduur van het verwezen object langer of gelijk is aan die van de verwijzing.

Voorbeeld:

class Owner {
    var pet: Pet?
}

class Pet {
    unowned let owner: Owner
    init(owner: Owner) {
        self.owner = owner
    }
}

let owner = Owner()
owner.pet = Pet(owner: owner)

Hier houdt Pet een unowned verwijzing naar Owner, ervan uitgaande dat Owner langer leeft dan Pet.