Junior — Middle
Quelles raisons rendent l'utilisation de Unowned moins préférée dans certaines situations?
sobes.tech IA
Réponse de l'IA
L'utilisation de unowned en iOS (Swift) est moins recommandée dans les situations où il existe un risque que l'objet référencé par unowned puisse être libéré (deallocated) avant que la référence ne soit utilisée. Contrairement à weak, unowned n'est pas optionnel et ne devient pas nil lors de la libération de l'objet, donc accéder à cette référence après la libération entraînera une erreur d'exécution.
Raisons d'éviter unowned :
- Si le cycle de vie de l'objet ne garantit pas que la référence sera toujours valide.
- Lors de références mutuelles complexes, où l'ordre de libération des objets n'est pas évident.
Dans ces cas, il est préférable d'utiliser weak, qui devient automatiquement nil, évitant ainsi une terminaison inattendue.
Exemple :
class A {
unowned var b: B
init(b: B) { self.b = b }
}
class B {
var a: A?
}
Si l'objet B est libéré avant A, accéder à b dans A provoquera une erreur.