Junior — Middle
Est-il possible d'avoir des références cycliques empêchant la collecte de déchets dans un gestionnaire de mémoire automatique?
sobes.tech IA
Réponse de l'IA
Oui, sur iOS, lors de l'utilisation de la gestion automatique de la mémoire (ARC), il est possible de créer des cycles de références (retain cycles). Cela se produit lorsque deux ou plusieurs objets se maintiennent mutuellement par des références fortes, empêchant le compteur de références de devenir zéro, et donc empêchant la libération des objets.
Pour éviter ces situations, on utilise des références faibles (weak) ou sans propriétaire (unowned). Par exemple, les délégués sont généralement déclarés comme weak pour prévenir les cycles.
Exemple :
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // référence faible pour éviter le cycle
}
let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john
Dans cet exemple, tenant est une référence faible, donc aucun cycle ne se forme, et les objets seront correctement libérés par le ramasse-miettes.