Junior
Mi a különbség a referencia típusok és az érték típusok között?
sobes.tech MI
Válasz az MI-től
Értéktípusok (Value Types) másolódnak értékadás vagy függvényhívás során. Minden példány saját adatmásolatával rendelkezik.
Referencia típusok (Reference Types) értékadás vagy függvényhívás során ugyanarra az adatpéldányra mutató hivatkozást adnak át. Az egyik hivatkozáson keresztüli adatváltoztatás minden más hivatkozásban is megjelenik ugyanarra az adatpéldányra.
| Jellemző | Értéktípus (Value Type) | Referencia típus (Reference Type) |
|---|---|---|
| Viselkedés átadás/értékadás során | Másolás | Hivatkozás átadása |
| Memória helye | Verem (Heap) | Halom (Stack) |
| Memóriakezelés | Automatikus (verem által) | Automatikus (ARC) |
| Swift példák | struct, enum, tuple |
class, func, closure |
// Értéktípus példája (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 másolatot kap p1-ről
p2.x = 10 // A p2 változtatása nem befolyásolja p1-et
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Referencia típus példája (Osztály)
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 ugyanarra az objektumra mutat
c2.x = 10 // A c2 változtatása hatással van c1-re, mivel ugyanarra az objektumra mutat
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10