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" оптимизациясын ишке ашырып, көп шилтемелерде эс тутумду натыйжалуу башкарууга мүмкүндүк берет.