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,Stringgibi 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