Sobes.tech
Junior — Middle

Comment organiser correctement les liens dans le modèle d'objet pour éviter les cycles de mémoire?

sobes.tech IA

Réponse de l'IA

Pour éviter les cycles de rétention en modèle d'objet sur iOS (en utilisant Swift ou Objective-C), il est important d'utiliser correctement les références fortes (strong), faibles (weak) et non possédantes (unowned).

Idée principale:

  • strong — référence possédante, augmente le compteur de références de l'objet.
  • weak — référence non possédante, n'augmente pas le compteur, est automatiquement mise à nil lors de la suppression de l'objet.
  • unowned — référence non possédante, n'augmente pas le compteur, mais n'est pas mise à nil, utilisée lorsque l'objet vit plus longtemps.

Souvent, des cycles se produisent, par exemple, entre un parent et un enfant ou entre un délégué et un objet. Pour éviter les cycles:

  • Le parent maintient l'enfant via strong.
  • L'enfant référence le parent via weak ou unowned.

Exemple en Swift:

class Parent {
    var child: Child?
}

class Child {
    weak var parent: Parent?  // référence faible pour éviter le cycle
}

let parent = Parent()
let child = Child()
parent.child = child
child.parent = parent

Ainsi, lorsque parent et child ne sont plus utilisés, la mémoire est libérée correctement, sans fuites dues aux cycles.