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