Junior — Middle
Une référence forte dans une entité peut-elle entraîner des fuites de mémoire?
sobes.tech IA
Réponse de l'IA
Oui, la présence de références fortes entre objets dans iOS peut entraîner des fuites de mémoire, en particulier en cas de cycle de référence (cycle de rétention). Cela se produit lorsque deux objets se maintiennent mutuellement par des références fortes, et que le système ARC ne peut pas les libérer, car le compteur de références des deux n'atteint pas zéro.
Pour éviter ces fuites, on utilise des références faibles (weak) ou sans propriétaire (unowned), qui n'augmentent pas le compteur de références et permettent de rompre le cycle.
Exemple de cycle de référence :
class Person {
var apartment: Apartment?
}
class Apartment {
var tenant: Person?
}
let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // ici, un cycle de rétention se produit
Pour éviter la fuite, on peut rendre l'une des références faible :
class Apartment {
weak var tenant: Person?
}