Sobes.tech
Junior — Middle

Comment la mémoire des objets créés avec un type de référence est-elle libérée?

sobes.tech IA

Réponse de l'IA

En iOS, les objets créés à l'aide de types de référence (par exemple, les classes en Swift ou Objective-C) sont gérés par le système de comptage de références (ARC — Automatic Reference Counting). Chaque objet conserve un compteur de références — le nombre de références actives à lui. Lorsqu'une nouvelle référence à l'objet est créée, le compteur augmente, et lorsqu'une référence n'est plus utilisée (par exemple, une variable sort de la portée ou est assignée à nil), le compteur diminue.

Lorsque le compteur de références d'un objet atteint zéro, cela signifie qu'il n'y a plus de références à lui, et la mémoire occupée par l'objet est automatiquement libérée. Cela permet d'éviter les fuites de mémoire sans gestion manuelle.

Exemple en Swift:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    deinit {
        print("Personne \(name) libérée")
    }
}

var p1: Person? = Person(name: "Ivan")
var p2 = p1 // le compteur de références a augmenté
p1 = nil // le compteur a diminué, mais l'objet est encore vivant
p2 = nil // le compteur est à 0, l'objet est libéré

Il est important d'éviter les références cycliques (cycles de rétention), lorsque deux objets se réfèrent mutuellement, ce qui empêche la libération de la mémoire. Pour cela, on utilise des références faibles (weak) ou sans propriétaire (unowned).