Sobes.tech
Middle

Ի՞նչ է նշանակում, երբ արժեքի տիպը (value type) պատկանում է հղման տիպին (reference type):

sobes.tech AI

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

Արժեքի տիպը կոպիարվում է նշանակման կամ ֆունկցիային փոխանցման ժամանակ, մինչդեռ հղման տիպը փոխանցվում է հղումով, այսինքն՝ նշանագնացը կոպիարվում է առկա օրինակին:

Արժեքային Տիպեր (Value Types):

  • Կառուցվածքներ (struct)
  • Ցանկեր (enum)
  • Թյուպլ (tuple)
  • Ամենատարածված հիմնական տիպերը (Int, String, Bool, Array, Dictionary, Set և այլն)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p1 արժեքը կոպիարվում է p2-ին
p2.x = 10

// p1.x դեռևս 1 է, p2.x դարձել է 10
print("p1: \(p1.x)")
print("p2: \(p2.x)")

Հղման Տիպեր (Reference Types):

  • Սինֆոններ (class)
  • Ֆունկցիաներ (closure)
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

// c1.x նույնպես դարձավ 10
print("c1: \(c1.x)")
print("c2: \(c2.x)")

Հիմնական տարբերությունները:

Գծագիր Արժեքի Տիպ (Value Type) Հղման Տիպ (Reference Type)
Հատկացում Արժեքի կոպիա Հղման (ցուցակի) կոպիա
Մეხանիզմ Stack-ում է հատկացվում (հեշտ դեպքերում) Heap-ում է հատկացվում
Կիսում Ամեն փոփոխական ունի իր սեփական կոպիան Բազմաթիվ փոփոխականներ կարող են հղում կատարել նույն օրինակին
Մուտաբելություն Փոփոխության համար պետք է փոխել կոպիան Փոփոխությունը մեկ հղումով բոլորին է տեսանելի

iOS ծրագրավորման մեջ երկու տիպերն էլ հաճախ են օգտագործվում: Դրանց տարբերությունները իմանալով, կարող եք ընտրել համապատասխան տիպը կոնկրետ առաջադրանքի համար և խուսափել unwanted կողմնակի ազդեցություններից, հատկապես mutable տվյալների հետ աշխատելիս։