Junior
Kāda ir atšķirība starp atsauces tipiem un vērtības tipiem?
sobes.tech AI
Atbilde no AI
Vērtību tipi (Value Types) tiek kopēti pie piešķiršanas vai nodošanas funkcijai. Katram gadījumam ir sava datu kopija.
Atsauces tipi (Reference Types) pie piešķiršanas vai nodošanas funkcijai nodod atsauci uz to pašu datu instanci. Datu izmaiņas caur vienu atsauci ietekmēs visas citas atsauces uz šo pašu instanci.
| Īpašība | Vērtību tips (Value Type) | Atsauces tips (Reference Type) |
|---|---|---|
| Uzvedība pie piešķiršanas/nodošanas | Kopēšana | Atsauces nodošana |
| Atmiņas atrašanās vieta | Krava (Heap) | Krava (Stack) |
| Atmiņas pārvaldība | Automātiska (caur kravu) | Automātiska (ARC) |
| Piemēri Swift | struct, enum, tuple |
class, func, closure |
// Vērtību tipa piemērs (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 saņem p1 kopiju
p2.x = 10 // Izmaiņas p2 neietekmē p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Atsauces tipa piemērs (Klase)
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 norāda uz to pašu objektu, kas c1
c2.x = 10 // Izmaiņas c2 ietekmēs c1, jo abi norāda uz to pašu objektu
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10