Junior
¿Cuál es la diferencia entre tipos de referencia y tipos de valor?
sobes.tech AI
Respuesta de la IA
Los tipos de valor (Value Types) se copian al asignar o pasar a una función. Cada instancia tiene su propia copia de los datos.
Los tipos de referencia (Reference Types) al asignar o pasar a una función, se pasa una referencia a la misma instancia de datos. Cambiar los datos a través de una referencia afectará a todas las demás referencias a esa misma instancia.
| Característica | Tipo de valor (Value Type) | Tipo de referencia (Reference Type) |
|---|---|---|
| Comportamiento al asignar/pasar | Copia | Pasa la referencia |
| Ubicación en memoria | Pila (Heap) | Montón (Stack) |
| Gestión de memoria | Automática (a través de la pila) | Automática (ARC) |
| Ejemplos en Swift | struct, enum, tuple |
class, func, closure |
// Ejemplo de Tipo de Valor (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 obtiene una copia de p1
p2.x = 10 // Cambiar p2 no afecta a p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Ejemplo de Tipo de Referencia (Clase)
class Coordinate {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 referencia al mismo objeto que c1
c2.x = 10 // Cambiar c2 afecta a c1, ya que ambos apuntan al mismo objeto
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10