Sobes.tech
Junior — Middle

Dans quelle situation est-il préférable d'utiliser weak ou unowned pour la gestion de la mémoire dans une équipe de développeurs?

sobes.tech IA

Réponse de l'IA

En iOS, pour gérer la mémoire avec ARC (Automatic Reference Counting), on utilise des références faibles (weak) et non sécurisées (unowned) pour éviter les cycles de rétention d'objets.

  • weak est utilisé lorsque la référence peut devenir nil à un moment donné, c'est-à-dire que l'objet auquel elle fait référence peut être supprimé. La référence faible est automatiquement mise à nil lors de la libération de l'objet. Cela convient lorsque la relation n'est pas obligatoire et que l'objet peut disparaître.

  • unowned est utilisé lorsque la référence doit toujours pointer vers un objet existant et ne peut pas être nil. Si l'objet est libéré et que la référence non sécurisée reste, cela entraînera une erreur à l'exécution. En général, on utilise unowned lorsque le cycle de vie de l'objet référencé est garanti d'être plus long que celui du propriétaire de la référence.

Exemple :

class Parent {
    var child: Child?
}

class Child {
    weak var parent: Parent? // weak, car le parent peut être supprimé plus tôt
}

// Ou

class Customer {
    let card: CreditCard
    init() {
        card = CreditCard(customer: self)
    }
}

class CreditCard {
    unowned let customer: Customer // unowned, car la carte ne peut pas exister sans le client
    init(customer: Customer) {
        self.customer = customer
    }
}

Résumé :

  • Utilisez weak lorsque la référence peut devenir nil et que vous souhaitez éviter un cycle de rétention.
  • Utilisez unowned lorsque la référence doit toujours être valide et que l'objet existe plus longtemps que la référence.