Junior
Koja je razlika između referentnih i vrednosnih tipova?
sobes.tech АИ
Одговор од АИ
Tipovi vrednosti (Value Types) se kopiraju prilikom dodeljivanja ili prosleđivanja u funkciju. Svaki primerak ima sopstvenu kopiju podataka.
Tipovi referenci (Reference Types), prilikom dodeljivanja ili prosleđivanja u funkciju, prosleđuju referencu na istu instancu podataka. Promene podataka putem jedne reference odraziće se na sve ostale reference na istu instancu.
| Karakteristika | Tip vrednosti (Value Type) | Tip reference (Reference Type) |
|---|---|---|
| Ponašanje pri dodeljivanju/prosleđivanju | Kopiranje | Prosleđivanje reference |
| Lokacija u memoriji | Stek (Heap) | Stek (Stack) |
| Upravljanje memorijom | Automatski (kroz stek) | Automatski (ARC) |
| Primeri u Swift | struct, enum, tuple |
class, func, closure |
// Primer tipa vrednosti (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 dobija kopiju p1
p2.x = 10 // Izmena p2 ne utiče na p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Primer tipa reference (Klasa)
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 referencira isti objekat kao i c1
c2.x = 10 // Izmena c2 utiče na c1, jer oba ukazuju na isti objekat
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10