Sobes.tech
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.