Sobes.tech
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