Sobes.tech
Middle

Qaysi ma'lumot turi (value type) referans turi (reference type) ga tegishli bo'lsa, bu nima anglatadi?

sobes.tech AI

AIdan javob

Qiymat turi belgilash yoki funktsiyaga o'tkazishda nusxa olinadi, referans turi esa referens orqali o'tkaziladi, ya'ni mavjud nusxa uchun ko'rsatkich nusxa olinadi.

Qiymat Turlari (Value Types):

  • Tuzilmalar (struct)
  • Enumlar (enum)
  • Tuple (tuple)
  • Ko'pchilik asosiy turlar (Int, String, Bool, Array, Dictionary, Set va boshqalar)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p1 ning qiymati p2 ga nusxa olinadi
p2.x = 10

// p1.x hali ham 1, p2.x 10 bo'ldi
print("p1: \(p1.x)")
print("p2: \(p2.x)")

Referans Turlari (Reference Types):

  • Sinflar (class)
  • Funktsiyalar (closure funksiyalar)
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 bilan bir xil nusxaga murojaat qiladi
c2.x = 10

// c1.x ham 10 bo'ldi
print("c1: \(c1.x)")
print("c2: \(c2.x)")

Asosiy farqlar:

Xususiyat Qiymat Turi (Value Type) Referans Turi (Reference Type)
Belgilash Qiymat nusxasi Referans nusxasi (ko'rsatkich)
Xotira Stackda ajratiladi (oddiy holatlar uchun) Heapda ajratiladi
Umumiy foydalanish Har bir o'zgaruvchi o'z nusxasiga ega Bir nechta o'zgaruvchilar bir xil nusxaga murojaat qilishi mumkin
Mutability O'zgartirish uchun nusxani o'zgartirish kerak Bir referens orqali o'zgartirish hamma uchun ko'rinadi

iOS dasturlashda har ikkala tur ham keng qo'llaniladi. Ularning farqlarini bilib, har bir vazifa uchun mos turni tanlash va istalmagan yon ta'sirlarni oldini olish mumkin, ayniqsa o'zgartiriladigan ma'lumotlar bilan ishlaganda.