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