Sobes.tech
Middle

Comment sont stockées les vues qui sont un type de référence?

sobes.tech IA

Réponse de l'IA

Les vues (UIView et ses sous-classes) dans iOS sont des classes, donc des types de référence. Le stockage des références à celles-ci se fait par les mécanismes suivants :

  1. Références fortes (Strong References) :

    • Par défaut, si vous déclarez une propriété pour UIView sans le spécificateur weak ou unowned, cela crée une référence forte.
    • Une référence forte augmente le compteur de références de l'objet. L'objet ne sera pas supprimé de la mémoire tant qu'il existe au moins une référence forte.
    • C'est la méthode standard de stockage des vues lorsqu'il est nécessaire qu'elles restent en mémoire et accessibles.
    //Référence forte
    var myView: UIView = UIView()
    
  2. Références faibles (Weak References) :

    • Déclarées avec le mot-clé weak.
    • Une référence faible n'augmente pas le compteur de références de l'objet.
    • Les références faibles ne empêchent pas la suppression de l'objet de la mémoire si aucune référence forte ne reste.
    • Utilisées pour éviter les cycles de références fortes, une situation typique est la relation parent-enfant, où le parent a une référence forte à l'enfant, et l'enfant peut parfois avoir une référence au parent. Dans ce cas, la référence inverse au parent doit être faible.
    • Les références faibles doivent être optionnelles (Optional), car l'objet peut être supprimé, et la référence devient nil.
    weak var parentView: UIView?
    
  3. Références non possédées (Unowned References) :

    • Déclarées avec le mot-clé unowned.
    • Comme les références faibles, elles n'augmentent pas le compteur de références.
    • Différence : contrairement aux références faibles, les références non possédées ne sont pas optionnelles. Elles supposent que l'objet vivra au moins aussi longtemps que la référence. L'accès à l'objet après sa libération entraînera un crash.
    • Utilisées lorsque l'on est sûr que le cycle de vie de la référence ne dépasse pas celui de l'objet pointé. Dans le contexte des vues, c'est moins courant que weak.
    //Moins typique pour les vues, mais possible
    unowned var childView: UIView
    
  4. Tableaux et Collections :

    • Le stockage de références à des vues dans des tableaux (Array), dictionnaires (Dictionary) ou ensembles (Set) crée également par défaut des références fortes aux éléments.
    var subviews: [UIView] = []
    

Le choix entre référence forte, faible ou non possédée dépend du scénario d'utilisation et de la gestion du cycle de vie pour éviter les fuites de mémoire. En SwiftUI, la gestion du cycle de vie des vues est différente, mais dans UIKit, ces mécanismes restent la méthode principale de stockage des références.