Junior
Referans tipleri ile değer tipleri arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Referans, orada depolanan verilere işaret eden bellekteki bir adresi tutar. Aslında, referansı tutan değişken sadece bu adresi sahip olur, verileri değil. Bir referans tipi, bir değişkene atandığında, referansı kopyalar, verileri değil. Referansın gösterdiği verilere yapılan değişiklikler, bu referansı tutan tüm değişkenlerde yansır.
Değer tipi ise doğrudan verileri saklar. Bir değeri tipi, bir değişkene atandığında, verilerin kendisini kopyalar. Bir değer tipi değişkeninde yapılan değişiklikler, bu kopyayı alan diğer değişkenleri etkilemez.
| Özellik | Referans Tipi | Değer Tipi |
|---|---|---|
| Depolama | Veriye referans | Kendisi veriler |
| Atama | Referansın kopyası | Verilerin kopyası |
| Değişiklik | Tüm referansları etkiler | Kopyaları etkilemez |
| Konum | Heap'te | Stack'te |
| Serbest bırakma | ARC / çöp toplayıcı | Otomatik olarak kapsam dışına çıkıldığında |
| Swift örnekleri | class, closure | struct, enum, tuple, temel tipler (Int, Bool, String, vb.) |
// Referans tipi örneği (sınıf)
class ReferenceType {
var value: Int
init(value: Int) {
self.value = value
}
}
let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // Referans kopyalanır
ref2.value = 20 // ref1 ve ref2'nin gösterdiği veriler değişir
print(ref1.value) // Çıktı: 20
print(ref2.value) // Çıktı: 20
// Değer tipi örneği (yapı)
struct ValueType {
var value: Int
}
var val1 = ValueType(value: 10)
var val2 = val1 // Veriler kopyalanır
val2.value = 20 // Sadece val2'nin verileri değişir
print(val1.value) // Çıktı: 10
print(val2.value) // Çıktı: 20