Je suis en train d'explorer les types de valeurs Swift, en particulier les structs, pour mieux comprendre leur utilisation dans différents scénarios. J'ai été étonné de voir comment un enum peut être utilisé pour construire un arbre de recherche binaire en utilisant des structs. indirect
qui introduit une fine couche de sémantique de référence.
enum BinarySearchTree<T: Comparable> {
case empty
case leaf(T)
indirect case node(BinarySearchTree, T, BinarySearchTree)
}
Pour en venir à la vraie question, ce que j'ai du mal à trouver, c'est ce qu'il advient du type de référence dans un type de valeur. Comment la relation fonctionnera-t-elle ? comme la gestion de la mémoire, le cycle de vie des objets.
Par exemple
class B {
var data: Int = 0
deinit {
print("deallocated!")
}
}
struct A {
var b = B()
}
Dans le cas ci-dessus, un type de valeur contient une référence à un type de référence.
- Quand est-ce que
deinit
seront appelés ? - Est-ce que chaque nouvelle instance de struct de type
A
aura une référence à la même instance de la classeB
ou seront-ils différents. - Que dois-je faire si c'est une odeur de code ?
- Autre chose ?