Sobes.tech
Junior

Ի՞նչ է տարբերությունը հղման տեսակների և արժեքի տեսակների միջև։

sobes.tech AI

Պատասխան AI-ից

Արժեքի տեսակները (Value Types) պատկանելության կամ փոխանցման ժամանակ պատճենվում են: Յուրաքանչյուր օրինակ ունի իր սեփական տվյալների պատճենը:

Հղման տեսակները (Reference Types) պատկանելության կամ փոխանցման ժամանակ փոխանցում են նույն տվյալների օրինակին հղում: Փոփոխությունները մեկ հղումով կանդրադառնան բոլոր մյուս հղումներին, որոնք հղում են նույն օրինակին:

Գծագիր Արժեքի տեսակ (Value Type) Հղման տեսակ (Reference Type)
Վարվելաձև փոխանցման/տվյալի Նույնականացում Հղում փոխանցում
Հիշողության տեղադրումը Stack (Heap) Heap (Stack)
Հիշողության կառավարում Ավտոմատ (stack-ի միջոցով) Ավտոմատ (ARC)
Swift-ում օրինակներ struct, enum, tuple class, func, closure
// Արժեքի տեսակ օրինակ (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 ստանում է p1-ի պատճենը
p2.x = 10   // p2-ում փոփոխությունը չի ազդում p1-ի վրա
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Հղման տեսակ օրինակ (Կլաս)
class Coordinate {
    var x: Int
    var y: Int
    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 հղում է նույն օբյեկտին, ինչ c1
c2.x = 10   // Փոփոխությունը c2-ում ազդում է c1-ի վրա, քանի որ երկուսը հղում են նույն օբյեկտին
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10