Sobes.tech
Middle

¿Cómo se pueden almacenar objetos de clases en un array mediante una referencia fuerte?

sobes.tech AI

Respuesta de la IA

Los objetos de clase en un array se almacenan por defecto en Swift mediante referencias fuertes, si el array contiene elementos de tipo clase. Un array [MyClass] o Array<MyClass> contendrá referencias fuertes a las instancias de MyClass.

Ejemplo:

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

var arrayReferenciasFuertes: [MyClass] = []

for i in 0..<3 {
    let obj = MyClass(id: i)
    arrayReferenciasFuertes.append(obj) // El array mantiene referencias fuertes
}

print("El array tiene \(arrayReferenciasFuertes.count) elementos")

// Los objetos no serán liberados mientras existan referencias fuertes en el array
// Asignar `nil` al array o eliminar elementos conducirá a la liberación,
// si no hay otras referencias fuertes.

// arrayReferenciasFuertes = [] // Ejemplo de liberar todas las referencias fuertes
// arrayReferenciasFuertes.remove(at: 0) // Ejemplo de liberar una referencia fuerte

En Swift, los arrays de valores (struct) o arrays de enumeraciones (enum) almacenan copias de sus elementos. Sin embargo, si el array contiene instancias de clases (class), almacena referencias fuertes a esas instancias.