Sobes.tech
Middle

Фарқи байни нусхагирии массив ва нусхагирии структура дар забони барномасозии Swift чист?

sobes.tech AI

Ҷавоб аз AI

Қайталанған құрылым жаңа тәуелсіз мысал болып табылады. Бір құрылымдағы өзгерістер басқаға әсер етпейді.

Swift-те массивтің (Array) көшіруі әдепкі бойынша "жазу кезінде көшіру" (copy-on-write) принципімен жүзеге асырылады. Бұл дегеніміз, жаңа сілтеме массивке жасалғанда, деректер көбейтілмейді, егер бір көшірме өзгертілмесе. Осы уақытқа дейін екі өзгергіш бірдей жады элементтеріне сілтеме жасайды. Бір көшірме өзгертілгенде, жаңа тәуелсіз деректер мысалы жасалады.

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

var p1 = Point(x: 1, y: 2)
var p2 = p1 // Құрылымның көшірмесі. p2 жаңа мысал

p2.x = 10 // p2-дағы өзгеріс p1-ге әсер етпейді

print("p1: \(p1.x), \(p1.y)") // Шығу: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Шығу: p2: 10, 2

var array1 = [1, 2, 3]
var array2 = array1 // Жазу кезінде көшіру

array2[0] = 10 // Деректердің нақты көшірмесі орындалады

print("array1: \(array1)") // Шығу: array1: [1, 2, 3]
print("array2: \(array2)") // Шығу: array2: [10, 2, 3]

Айырмашылық негізгі мінез-құлықта жатыр: құрылымдар әрқашан мән бойынша көшіріледі, ал массивтер, құрылымдар болғандықтан, "copy-on-write" оңтайландыруын жүзеге асырады, бұл бірнеше сілтемелер кезінде жадыны тиімді басқаруға мүмкіндік береді.