Sobes.tech
Junior — Middle

Pouvez-vous expliquer ce que signifie le terme 'Unowned' dans le contexte de la gestion de la mémoire?

sobes.tech IA

Réponse de l'IA

Dans le contexte de la gestion de la mémoire en iOS (et Swift), le terme "Unowned" désigne une référence faible à un objet qui n'augmente pas le compteur de références (retain count), mais suppose que l'objet existe pendant l'utilisation de cette référence.

Différences avec weak :

  • La référence weak peut devenir nil si l'objet est supprimé, et est donc déclarée comme optionnelle.
  • La référence unowned n'est pas optionnelle et n'est pas automatiquement mise à nil. Si l'objet référencé par unowned est supprimé, toute tentative d'accès entraînera une erreur d'exécution (crash).

Utilisé lorsque l'on garantit que la durée de vie de l'objet référencé est supérieure ou égale à celle de la référence.

Exemple :

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)

Ici, Pet conserve une référence unowned à Owner, en supposant que Owner vit plus longtemps que Pet.