Sobes.tech
Junior

Care este diferența dintre tipurile de referință și tipurile de valoare?

sobes.tech AI

Răspuns de la AI

Tipurile de valoare (Value Types) sunt copiate la atribuire sau transmitere către o funcție. Fiecare instanță are propria copie a datelor.

Tipurile de referință (Reference Types), la atribuire sau transmitere, transmit o referință către aceeași instanță de date. Modificarea datelor printr-o referință va fi reflectată în toate celelalte referințe către aceeași instanță.

Caracteristică Tip de valoare (Value Type) Tip de referință (Reference Type)
Comportament la atribuire/transmitere Copiere Transmitere referință
Locație în memorie Stivă (Heap) Heap (Stivă)
Gestionarea memoriei Automată (prin stivă) Automată (ARC)
Exemple în Swift struct, enum, tuple class, func, closure
// Exemplu de Tip de Valoare (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 primește o copie a lui p1
p2.x = 10   // Modificarea lui p2 nu afectează p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Exemplu de Tip de Referință (Clasă)
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 referențiază același obiect ca și c1
c2.x = 10   // Modificarea lui c2 afectează c1, deoarece amândoi indică același obiect
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10