Sobes.tech
Junior — Middle

Dans quels cas est-il préférable d'utiliser unowned plutôt que weak dans la gestion de la mémoire?

sobes.tech IA

Réponse de l'IA

En Swift, weak et unowned sont utilisés pour éviter les cycles de références fortes, mais s'appliquent dans des situations différentes :

  • weak est une référence optionnelle qui devient automatiquement nil lorsque l'objet référencé est libéré. Elle est utilisée lorsque la référence peut devenir nil au cours de la vie de l'objet.

  • unowned est une référence non optionnelle qui suppose que l'objet référencé existera toujours pendant l'utilisation de cette référence. Si l'objet est libéré, accéder à unowned provoquera une erreur à l'exécution.

Il est préférable d'utiliser unowned lorsque :

  • La référence doit toujours pointer vers un objet existant (par exemple, un objet parent qui vit plus longtemps que l'enfant).
  • Vous êtes sûr que la durée de vie de l'objet référencé n'est pas plus courte que celle de la référence.

Exemple :

class Customer {
    let name: String
    var card: CreditCard?
    init(name: String) {
        self.name = name
    }
}

class CreditCard {
    let number: UInt64
    unowned let customer: Customer
    init(number: UInt64, customer: Customer) {
        self.number = number
        self.customer = customer
    }
}

let john = Customer(name: "John Appleseed")
john.card = CreditCard(number: 1234_5678_9012_3456, customer: john)

Ici, CreditCard a une référence unowned à Customer, car la carte ne peut pas exister sans le client, et le client vit plus longtemps que la carte.