Mi a különbség egy tömb másolása és egy struktúra másolása között a Swift programozási nyelvben?
sobes.tech MI
Válasz az MI-től
A másolt struktúra egy új független példány. Egy struktúrában végzett változtatások nem befolyásolják a másikat.
A Swiftben az Array másolása alapértelmezés szerint "másolás íráskor" (copy-on-write) módszerrel történik. Ez azt jelenti, hogy amikor egy új hivatkozást hozunk létre egy tömbre, az adatok nem duplikálódnak, amíg az egyik példányt nem módosítják. Eddig mindkét változó ugyanarra az adatra hivatkozik a memóriában. Amikor az egyik példányt módosítják, egy új, független adatpéldány jön létre.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Struktúra másolása. p2 egy új példány
p2.x = 10 // A p2 módosítása nem befolyásolja p1-et
print("p1: \(p1.x), \(p1.y)") // Kimenet: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Kimenet: p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Íráskor másolás
array2[0] = 10 // Valós adatmásolás történik
print("array1: \(array1)") // Kimenet: array1: [1, 2, 3]
print("array2: \(array2)") // Kimenet: array2: [10, 2, 3]
A különbség a fundamentális viselkedésben rejlik: a struktúrák mindig érték szerint másolódnak, míg a tömbök, mint struktúrák, az "copy-on-write" optimalizációt valósítják meg, hogy hatékonyabban kezeljék a memóriát több hivatkozás esetén.