Sobes.tech
Junior

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

sobes.tech AI

Răspuns de la AI

Referința stochează o adresă în memorie care indică către datele stocate acolo. De fapt, variabila care stochează referința deține doar această adresă, nu datele în sine. Atribuirea unui tip de referință unei variabile copiază referința, nu datele. Modificările datelor la care face referire referința se reflectă în toate variabilele care stochează această referință.

Tipul de valoare stochează direct datele. Atribuirea unui tip de valoare unei variabile copiază datele în sine. Modificările într-o variabilă de tip valoare nu afectează alte variabile care au primit această copie.

Caracteristică Tip de referință Tip de valoare
Stocare Referință la date Datele în sine
Atribuire Copie a referinței Copie a datelor
Modificare Afectează toate referințele Nu afectează copiile
Localizare În heap În stivă
Eliberare ARC / colector de gunoi Automat la ieșirea din domeniu
Exemple în Swift class, closure struct, enum, tuple, tipuri de bază (Int, Bool, String etc.)
// Exemplu de tip de referință (clasă)
class ReferenceType {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // Referința este copiată
ref2.value = 20 // Datele la care indică ref1 și ref2 se schimbă
print(ref1.value) // Ieșire: 20
print(ref2.value) // Ieșire: 20

// Exemplu de tip de valoare (structură)
struct ValueType {
    var value: Int
}

var val1 = ValueType(value: 10)
var val2 = val1 // Datele sunt copiate
val2.value = 20 // Doar datele din val2 se schimbă
print(val1.value) // Ieșire: 10
print(val2.value) // Ieșire: 20