Sobes.tech
Middle

Como armazenar objetos de classes num array por referência forte?

sobes.tech IA

Resposta da IA

Os objetos de classe num array são armazenados por padrão em Swift através de referências fortes, se o array contiver elementos do tipo classe. Um array [MyClass] ou Array<MyClass> conterá referências fortes às instâncias de MyClass.

Exemplo:

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

var arrayReferenciasFortes: [MyClass] = []

for i in 0..<3 {
    let obj = MyClass(id: i)
    arrayReferenciasFortes.append(obj) // O array mantém referências fortes
}

print("O array tem \(arrayReferenciasFortes.count) elementos")

// Os objetos não serão liberados enquanto existirem referências fortes no array
// Atribuir `nil` ao array ou remover elementos levará à liberação,
// se não houver outras referências fortes.

// arrayReferenciasFortes = [] // Exemplo de liberar todas as referências fortes
// arrayReferenciasFortes.remove(at: 0) // Exemplo de liberar uma referência forte

Em Swift, arrays de valores (struct) ou arrays de enums (enum) armazenam cópias de seus elementos. No entanto, se o array contiver instâncias de classes (class), ele armazenará referências fortes a essas instâncias.