Sobes.tech
Junior — Middle

Quelle est la différence entre l'utilisation des mots-clés 'unowned' et 'strong' lors de la déclaration de références en Swift?

sobes.tech IA

Réponse de l'IA

En Swift, les mots-clés strong et unowned sont utilisés pour gérer les références et prévenir les cycles de rétention (retain cycles).

  • strong — c'est une référence forte standard qui augmente le compteur de références de l'objet. Tant qu'il existe au moins une référence forte, l'objet ne sera pas supprimé de la mémoire.

  • unowned — c'est une référence faible, mais non optionnelle. Elle n'augmente pas le compteur de références, mais suppose que l'objet référencé existe toujours lors de l'utilisation de cette référence. Si l'objet a déjà été supprimé, accéder à la référence unowned entraînera une erreur à l'exécution.

Exemple:

class Person {
    var apartment: Apartment?
}

class Apartment {
    unowned let tenant: Person
    init(tenant: Person) {
        self.tenant = tenant
    }
}

let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt

Ici, tenant est déclaré comme unowned parce que l'appartement ne doit pas maintenir la personne avec une référence forte pour éviter un cycle, mais on suppose que la personne existe plus longtemps que l'appartement.