Sobes.tech
Junior — Middle

Cum se disting tipurile de date bazate pe referințe de cele care stochează valorile direct?

sobes.tech AI

Răspuns de la AI

În iOS (Swift și Objective-C), tipurile de date sunt împărțite în tipuri de valoare (value types) și tipuri de referință (reference types).

  • Tipurile de valoare stochează datele direct. La atribuirea sau transmiterea către o funcție, se creează o copie a datelor. În Swift, acestea includ structuri (struct), enumerări (enum) și tipuri de bază precum Int, Double, Bool.

  • Tipurile de referință stochează o referință către o zonă de memorie unde se află datele. La atribuire, se copiază referința, nu datele în sine. Modificările printr-o referință sunt vizibile și prin alte referințe. În Swift, acestea sunt clase (class).

Cum le deosebim:

  • În Swift, dacă un tip este declarat ca struct sau enum, acesta este un tip de valoare.
  • Dacă este declarat ca class, acesta este un tip de referință.

Exemplu:

struct Point {
    var x: Int
    var y: Int
}

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var p1 = Point(x: 0, y: 0)
var p2 = p1
p2.x = 10
print(p1.x) // 0 - copia nu s-a schimbat

var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - ambele variabile indică același obiect

Astfel, comportamentul la atribuiri și modificări permite distingerea tipurilor bazate pe referințe de cele care stochează valorile direct.