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