Junior
Koja je razlika između referentnih i vrednosnih tipova?
sobes.tech АИ
Одговор од АИ
Referenca čuva adresu u memoriji koja ukazuje na podatke koji su tamo smešteni. U stvari, promenljiva koja čuva referencu poseduje samo tu adresu, a ne same podatke. Dodeljivanjem referentnog tipa promenljivoj, kopira se referenca, a ne podaci. Promene u podacima na koje referenca ukazuje odražavaju se u svim promenljivima koje čuvaju tu referencu.
Tip vrednosti direktno čuva podatke. Dodeljivanjem tipa vrednosti promenljivoj, kopiraju se sami podaci. Promene u jednoj promenljivoj tipa vrednosti ne utiču na druge promenljive koje su dobile tu kopiju.
| Osobina | Referentni tip | Tip vrednosti |
|---|---|---|
| Skladištenje | Referenca na podatke | Sami podaci |
| Dodeljivanje | Kopiranje reference | Kopiranje podataka |
| Izmena | Utiče na sve reference | Ne utiče na kopije |
| Lokacija | U heap-u | U steku |
| Oslobađanje | ARC / sakupljač smeća | Automatski pri izlasku iz opsega |
| Primeri u Swift-u | class, closure | struct, enum, tuple, osnovni tipovi (Int, Bool, String itd.) |
// Primer referentnog tipa (klasa)
class ReferenceType {
var value: Int
init(value: Int) {
self.value = value
}
}
let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // Kopira se referenca
ref2.value = 20 // Podaci na koje ukazuju ref1 i ref2 se menjaju
print(ref1.value) // Izlaz: 20
print(ref2.value) // Izlaz: 20
// Primer tipa vrednosti (struktura)
struct ValueType {
var value: Int
}
var val1 = ValueType(value: 10)
var val2 = val1 // Podaci se kopiraju
val2.value = 20 // Menjaju se samo podaci u val2
print(val1.value) // Izlaz: 10
print(val2.value) // Izlaz: 20