Sobes.tech
Junior

Swift'te veri tipleri nerede saklanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Swift'teki veri türleri, ana bellek alanlarının iki temel bölümünde saklanır: yığın ve yığın dışı.

Yığın

  • Değer türleri (değer tipleri):
    • struct (yapılar)
    • enum (numaralandırmalar)
    • Int, Double, Bool, String gibi temel türler (kısa dizgiler, optimizasyon için doğrudan yığında saklanabilir)
  • Veriler, fonksiyonların yürütülme sırasına göre doğrudan yığında saklanır.
  • Bellek tahsisi ve serbest bırakma otomatik ve çok hızlıdır (LIFO - Last In, First Out).

Yığın Dışı

  • Referans türleri (referans tipleri):
    • class (sınıflar)
    • Fonksiyonlar ve kapanışlar (Closures)
    • Nesneler (AnyObject)
  • Nesneler kendileri yığında saklanır, yığında sadece onlara referanslar bulunur.
  • Yığın dışı bellek tahsisi ve serbest bırakma dinamik olarak gerçekleşir ve sistem tarafından yönetilir (Automatic Reference Counting - ARC).
  • Yığın içindeki verilere erişim dolaylıdır, gösterici aracılığıyla.

Özellikler

  • Değer tipi ataması yapıldığında, tüm değer kopyalanır.
  • Referans tipi ataması yapıldığında, sadece referans kopyalanır ve her iki nesne de aynı bellek alanına işaret eder.
  • ARC, yığında bulunan nesnelere güçlü referansların sayısını izler ve referans kalmadığında belleği otomatik olarak serbest bırakır.
// Değer tipi örneği - yığında saklanır
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 10, y: 20)
var p2 = p1 // Tüm değer kopyalanır

p2.x = 30 // p1 değişmez
print("p1: \(p1), p2: \(p2)") // Çıktı: p1: Point(x: 10, y: 20), p2: Point(x: 30, y: 20)

// Referans tipi örneği - yığında saklanır
class Circle {
    var radius: Double

    init(radius: Double) {
        self.radius = radius
    }
}

var c1 = Circle(radius: 5.0)
var c2 = c1 // Sadece referans kopyalanır

c2.radius = 10.0 // c1 de değişir, çünkü ikisi de aynı nesneye işaret eder
print("c1.radius: \(c1.radius), c2.radius: \(c2.radius)") // Çıktı: c1.radius: 10.0, c2.radius: 10.0