Sobes.tech
Junior — Middle

Comment l'utilisation de unowned influence-t-elle la gestion de la durée de vie d'un objet en programmation?

sobes.tech IA

Réponse de l'IA

En iOS (Swift), le mot-clé unowned est utilisé pour déclarer une référence faible à un objet, qui n'augmente pas le compteur de références, mais suppose que l'objet existera pendant toute la durée de vie de la référence.

L'utilisation de unowned aide à éviter les cycles de rétention, qui peuvent entraîner des fuites de mémoire. Contrairement à weak, la référence unowned n'est pas optionnelle et ne devient pas nil après la libération de l'objet, il faut donc l'utiliser uniquement si l'on garantit que l'objet existera plus longtemps que la référence.

Exemple :

class Person {
    var name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

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

let john = Person(name: "John")
let apt = Apartment(unit: "4A", tenant: john)
john.apartment = apt

Ici, Apartment conserve une référence unowned à Person pour éviter un cycle, en supposant que Person existera toujours tant que Apartment existe. Si Person est supprimé plus tôt, accéder à la référence unowned entraînera une erreur à l'exécution.