Junior
Koje su razlike između tipova vrednosti i referentnih tipova u programskom jeziku Swift?
sobes.tech АИ
Одговор од АИ
Tipovi vrednosti (Value Types) i referentni tipovi (Reference Types) razlikuju se u načinu na koji skladište i prenose podatke.
Tipovi vrednosti:
- Dodeljivanje kreira nezavisnu kopiju podataka.
- Podaci se direktno skladište na mestu deklaracije ili na steku (za lokalne promenljive).
- Strukture, enumeracije i tuple-ovi su tipovi vrednosti.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 0, y: 0)
var p2 = p1 // Kreira se kopija p1
p2.x = 10
print(p1.x) // 0
print(p2.x) // 10 - p1 se nije promenio
Referentni tipovi:
- Dodeljivanje kreira novu referencu na iste podatke.
- Podaci se skladište u hrpi, a referenca na njih je na mestu deklaracije ili na steku.
- Klase su referentni tipovi.
class Rect {
var width: Int
var height: Int
init(width: Int, height: Int) {
self.width = width
self.height = height
}
}
var r1 = Rect(width: 10, height: 20)
var r2 = r1 // r2 sada referiše na isti objekat kao i r1
r2.width = 30
print(r1.width) // 30 - r1 se promenio, jer r2 referiše na isti objekat
print(r2.width) // 30
Glavne razlike u tabeli:
| Karakteristika | Tipovi vrednosti (Value Types) | Tipovi referenci (Reference Types) |
|---|---|---|
| Dodeljivanje | Kopira podatke | Kopira referencu |
| Skladištenje podataka | Na mestu deklaracije / Stek | U hrpi (referenca na mestu deklaracije) |
| Bezbednost niti | Podrazumevano sigurni za niti | Zahtevaju sinhronizaciju za niti |
| Tipovi | Struct, Enum, Tuple, Array, Dict | Class, Function, Closure |
Izbor između tipova zavisi od zadatka: za prikaz jednostavnih nezavisnih podataka, preferiraju se Tipovi vrednosti, dok za objekte sa zajedničkom promenljivom i nasleđivanjem - Tipovi referenci (klase). Korišćenje Tipova vrednosti može poboljšati performanse smanjenjem opterećenja na hrpu i pojednostavljenjem upravljanja memorijom.