Middle
Comment peut-on stocker des objets de classes dans un tableau par référence forte?
sobes.tech IA
Réponse de l'IA
Les objets de classe dans un tableau sont stockés par défaut dans Swift via des références fortes, si le tableau contient des éléments de type classe. Un tableau [MyClass] ou Array<MyClass> contiendra des références fortes aux instances de MyClass.
Exemple:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) créé")
}
deinit {
print("MyClass \(id) libéré")
}
}
var tableauReferencesFortes: [MyClass] = []
for i in 0..<3 {
let obj = MyClass(id: i)
tableauReferencesFortes.append(obj) // Le tableau conserve des références fortes
}
print("Le tableau a \(tableauReferencesFortes.count) éléments")
// Les objets ne seront pas libérés tant qu'il existe des références fortes dans le tableau
// Assigner `nil` au tableau ou supprimer des éléments entraînera la libération,
// s'il n'y a pas d'autres références fortes.
// tableauReferencesFortes = [] // Exemple de libération de toutes les références fortes
// tableauReferencesFortes.remove(at: 0) // Exemple de libération d'une seule référence forte
En Swift, les tableaux de valeurs (struct) ou de enums (enum) stockent des copies de leurs éléments. Cependant, si le tableau contient des instances de classes (class), il stocke des références fortes à ces instances.