Middle
Kāda ir atšķirība starp masīva kopēšanu un struktūras kopēšanu Swift programmēšanas valodā?
sobes.tech AI
Atbilde no AI
Kopētā struktūra ir jauna neatkarīga piemērs. Izmaiņas vienā struktūrā neietekmē otru.
Swift valodā masīva (Array) kopēšana pēc noklusējuma notiek kā "copy-on-write" (kopēšana rakstīšanas laikā). Tas nozīmē, ka, izveidojot jaunu atsauci uz masīvu, dati netiek dublēti, kamēr viena no kopijām netiek mainīta. Līdz tam brīdim abas mainīgās norāda uz tās pašas atmiņas elementiem. Kad viena no kopijām tiek mainīta, tiek izveidots jauns neatkarīgs datu piemērs.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Struktūras kopija. p2 ir jauns piemērs
p2.x = 10 // Izmaiņas p2 neietekmē p1
print("p1: \(p1.x), \(p1.y)") // Izvade: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Izvade: p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Rakstīšanas laikā kopēšana
array2[0] = 10 // Notiek faktiska datu kopēšana
print("array1: \(array1)") // Izvade: array1: [1, 2, 3]
print("array2: \(array2)") // Izvade: array2: [10, 2, 3]
Atšķirība ir pamatā esošajā uzvedībā: struktūras vienmēr tiek kopētas pēc vērtības, bet masīvi, būdami struktūras, realizē "copy-on-write" optimizāciju, kas ļauj efektīvāk pārvaldīt atmiņu daudzskaitlī atsauču gadījumā.