Sobes.tech
Junior

¿En qué consiste la diferencia entre tipos de referencia y tipos de valor?

sobes.tech AI

Respuesta de la IA

La referencia almacena una dirección en la memoria que apunta a los datos almacenados allí. De hecho, la variable que almacena la referencia solo posee esa dirección, no los datos en sí. Asignar un tipo de referencia a una variable copia la referencia, no los datos. Los cambios en los datos a los que apunta la referencia se reflejan en todas las variables que almacenan esa referencia.

El tipo de valor almacena directamente los datos. Asignar un valor a una variable copia los datos en sí. Los cambios en una variable de tipo valor no afectan a otras variables que hayan recibido esa copia.

Característica Tipo de referencia Tipo de valor
Almacenamiento Referencia a datos Datos en sí
Asignación Copia de la referencia Copia de los datos
Cambio Afecta a todas las referencias No afecta a las copias
Ubicación En el montón (Heap) En la pila (Stack)
Liberación ARC / recolector de basura Automáticamente al salir del ámbito
Ejemplos en Swift class, closure struct, enum, tuple, tipos básicos (Int, Bool, String, etc.)
// Ejemplo de tipo de referencia (clase)
class ReferenceType {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // Se copia la referencia
ref2.value = 20 // Se cambian los datos a los que ref1 y ref2 apuntan
print(ref1.value) // Salida: 20
print(ref2.value) // Salida: 20

// Ejemplo de tipo de valor (estructura)
struct ValueType {
    var value: Int
}

var val1 = ValueType(value: 10)
var val2 = val1 // Se copian los datos
val2.value = 20 // Solo cambian los datos en val2
print(val1.value) // Salida: 10
print(val2.value) // Salida: 20