Sobes.tech
Junior

İstinad növləri ilə dəyər növləri arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

İstinad, orada saxlanılan məlumatlara işarə edən yaddaş ünvanını saxlayır. Əslində, istinadını saxlayan dəyişən yalnız bu ünvanı sahib olur, məlumatları deyil. İstinad tipini dəyişənə təyin etmək, istinadın surətini çıxarır, məlumatları yox. İstinadın göstərdiyi məlumatlarda dəyişikliklər, bu istinadını saxlayan bütün dəyişənlərdə əks olunur.

Dəyər tipi isə birbaşa məlumatları saxlayır. Dəyər tipini dəyişənə təyin etmək, məlumatların özünü surət çıxarır. Dəyər tipi olan dəyişəndəki dəyişikliklər, bu surəti alan digər dəyişənləri təsir etmir.

Xüsusiyyət İstinad tipi Dəyər tipi
Saxlama Məlumatlara istinad Öz məlumatları
Təyin etmə İstinadın surətini çıxarmaq Məlumatların surətini çıxarmaq
Dəyişiklik Bütün istinadlara təsir edir Surətləri təsir etmir
Yerləşmə Heap-də Stack-də
Azad etmə ARC / zibilləyici toplayıcı Avtomatik olaraq, sahədən çıxarkən
Swift nümunələri class, closure struct, enum, tuple, əsas turlar (Int, Bool, String və s.)
// İstinad tipinin nümunəsi (sinif)
class ReferenceType {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // İstinad surət çıxarılır
ref2.value = 20 // ref1 və ref2-nin göstərdiyi məlumatlar dəyişir
print(ref1.value) // Çıxış: 20
print(ref2.value) // Çıxış: 20

// Dəyər tipi nümunəsi (struktur)
struct ValueType {
    var value: Int
}

var val1 = ValueType(value: 10)
var val2 = val1 // Məlumatlar surət çıxarılır
val2.value = 20 // Yalnız val2-dəki məlumatlar dəyişir
print(val1.value) // Çıxış: 10
print(val2.value) // Çıxış: 20