Sobes.tech
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.