Sobes.tech
Middle

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.