Middle
Šta znači da tip vrednosti (value type) pripada tipu reference (reference type)?
sobes.tech АИ
Одговор од АИ
Vrednost tipa se kopira prilikom dodeljivanja ili prenosa u funkciju, dok se vrednost tipa reference prosleđuje putem reference, tj. kopira se pokazivač na postojeći primerak.
Tipovi vrednosti (Value Types):
- Strukture (struct)
- Enumeracije (enum)
- Tuple (tuple)
- Većina osnovnih tipova (Int, String, Bool, Array, Dictionary, Set itd.)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Vrednost p1 se kopira u p2
p2.x = 10
// p1.x i dalje je 1, p2.x je postao 10
print("p1: \(p1.x)")
print("p2: \(p2.x)")
Tipovi reference (Reference Types):
- Klase (class)
- Funkcije (closure)
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 referiše na isti primerak kao i c1
c2.x = 10
// c1.x je takođe 10
print("c1: \(c1.x)")
print("c2: \(c2.x)")
Glavne razlike:
| Karakteristika | Tip vrednosti (Value Type) | Tip reference (Reference Type) |
|---|---|---|
| Dodeljivanje | Kopiranje vrednosti | Kopiranje reference (pokazivača) |
| Memorija | Dodeljuje se na steku (za jednostavne slučajeve) | Dodeljuje se na hrpi |
| Deljenje | Svaka promenljiva ima svoju kopiju | Više promenljivih može da referiše na isti primerak |
| Mutabilnost | Za promenu, mora se promeniti kopija | Promena putem jedne reference je vidljiva svima |
U razvoju za iOS, oba tipa se često koriste. Poznavanjem njihovih razlika, možete odabrati odgovarajući tip za zadatak i izbegnuti neželjene posledice, posebno pri radu sa mutabilnim podacima.