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