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 :
-
Références fortes (Strong References) :
- Par défaut, si vous déclarez une propriété pour UIView sans le spécificateur
weakouunowned, 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() - Par défaut, si vous déclarez une propriété pour UIView sans le spécificateur
-
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 devientnil.
weak var parentView: UIView? - Déclarées avec le mot-clé
-
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 - Déclarées avec le mot-clé
-
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 stockage de références à des vues dans des tableaux (
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.