Care este diferența dintre copierea unui array și copierea unei structuri în limbajul de programare Swift?
sobes.tech AI
Răspuns de la AI
Structura copiată este o instanță nouă independentă. Modificările într-o structură nu afectează cealaltă.
Copierea unui array (Array) în Swift se face implicit prin "copy-on-write". Aceasta înseamnă că, atunci când se creează o nouă referință la un array, datele nu sunt duplicate până când una dintre copii nu este modificată. Până atunci, ambele variabile fac referire la aceleași elemente din memorie. Când una dintre copii este modificată, se creează o nouă instanță independentă a datelor.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Copierea structurii. p2 este o nouă instanță
p2.x = 10 // Modificarea lui p2 nu afectează p1
print("p1: \(p1.x), \(p1.y)") // Ieșire: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Ieșire: p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Copiere la scriere
array2[0] = 10 // Se face o copiere efectivă a datelor
print("array1: \(array1)") // Ieșire: array1: [1, 2, 3]
print("array2: \(array2)") // Ieșire: array2: [10, 2, 3]
Diferența constă în comportamentul fundamental: structurile sunt întotdeauna copiate după valoare, în timp ce array-urile, fiind structuri, implementează optimizarea "copy-on-write" pentru gestionarea mai eficientă a memoriei în cazul referințelor multiple.