Sobes.tech
Middle

Come si possono memorizzare oggetti di classi in un array tramite una referenza forte?

sobes.tech AI

Risposta dell'AI

Gli oggetti di classe in un array vengono memorizzati per impostazione predefinita in Swift tramite riferimenti forti, se l'array contiene elementi di tipo classe. Un array [MyClass] o Array<MyClass> conterrà riferimenti forti alle istanze di MyClass.

Esempio:

class MyClass {
    let id: Int
    init(id: Int) {
        self.id = id
        print("MyClass \(id) creato")
    }
    deinit {
        print("MyClass \(id) deallocato")
    }
}

var arrayRiferimentiForti: [MyClass] = []

for i in 0..<3 {
    let obj = MyClass(id: i)
    arrayRiferimentiForti.append(obj) // L'array mantiene riferimenti forti
}

print("L'array ha \(arrayRiferimentiForti.count) elementi")

// Gli oggetti non saranno deallocati finché esistono riferimenti forti nell'array
// Assegnare `nil` all'array o rimuovere elementi comporterà la deallocazione,
// se non ci sono altri riferimenti forti.

// arrayRiferimentiForti = [] // Esempio di liberare tutti i riferimenti forti
// arrayRiferimentiForti.remove(at: 0) // Esempio di liberare un riferimento forte

In Swift, gli array di valori (struct) o di enumerazioni (enum) memorizzano copie dei loro elementi. Tuttavia, se l'array contiene istanze di classi (class), memorizza riferimenti forti a tali istanze.