Middle
Değer tipi (value type) referans tipi (reference type) ile ilişkili olduğunda ne anlama gelir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Değer tipi atama veya fonksiyona geçirilirken kopyalanır, oysa referans tipi referansla geçirilir, yani mevcut örneğe işaret eden gösterici kopyalanır.
Değer Tipleri (Value Types):
- Yapılar (struct)
- Enumlar (enum)
- Demetler (tuple)
- Çoğu temel tip (Int, String, Bool, Array, Dictionary, Set vb.)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p1'in değeri p2'ye kopyalanır
p2.x = 10
// p1.x hâlâ 1, p2.x 10 oldu
print("p1: \(p1.x)")
print("p2: \(p2.x)")
Referans Tipleri (Reference Types):
- Sınıflar (class)
- Fonksiyonlar (closure fonksiyonlar)
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 ile aynı örneğe referans eder
c2.x = 10
// c1.x de 10 oldu
print("c1: \(c1.x)")
print("c2: \(c2.x)")
Ana farklar:
| Özellik | Değer Tipi (Value Type) | Referans Tipi (Reference Type) |
|---|---|---|
| Atama | Değerin kopyası | Referansın (işaretçinin) kopyası |
| Bellek | Yığında tahsis edilir (basit durumlar için) | Yığında tahsis edilir |
| Paylaşım | Her değişken kendi kopyasına sahiptir | Birden fazla değişken aynı örneğe referans edebilir |
| Değiştirilebilirlik | Değişiklik yapmak için kopyayı değiştirmek gerekir | Bir referans üzerinden yapılan değişiklikler herkes tarafından görülür |
iOS geliştirmede her iki tip de sıkça kullanılır. Farklarını bilerek, her göreve uygun tipi seçebilir ve istenmeyen yan etkilerden kaçınabilirsiniz, özellikle değiştirilebilir verilerle çalışırken.