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