Sobes.tech
Junior

Swift-də məlumat tipləri harada saxlanılır?

sobes.tech Süni İntellekt

AI-dan cavab

Swift-də məlumat tipləri yaddaşın iki əsas sahəsində saxlanılır: yığın və yığın xaricində.

Yığın

  • Dəyər tipləri (value types):
    • struct (quruluşlar)
    • enum (sayımlar)
    • Əsas tiplər, məsələn, Int, Double, Bool, String (qısa sətirlər optimallaşdırma üçün birbaşa yığında saxlanıla bilər)
  • Məlumatlar birbaşa yığında funksiyaların icra sırasına uyğun olaraq saxlanılır.
  • Yaddaşın ayrılması və azad olunması avtomatik və çox sürətli olur (LIFO - Last In, First Out).

Yığın

  • İstinad tipləri (reference types):
    • class (siniflər)
    • Funktsiyalar və closures
    • Ob'ektlər (AnyObject)
  • Ob'ektlər özləri yığında saxlanılır, yığında isə yalnız onlara istinadlar mövcuddur.
  • Yaddaşın ayrılması və azad olunması dinamik şəkildə həyata keçirilir və sistem tərəfindən idarə olunur (Automatic Reference Counting - ARC).
  • Yığın içindəki məlumatlara giriş dolayıdır, göstərici vasitəsilə.

Xüsusiyyətlər

  • Dəyər tipinə təyin edilərkən, bütün dəyər kopyalanır.
  • İstinad tipinə təyin edilərkən, yalnız istinad kopyalanır və hər iki obyekt eyni yaddaş sahəsinə işarə edir.
  • ARC, yığında olan obyektlərə güclü istinadların sayını izləyir və istinadlar qalmadıqda yaddaşı avtomatik azad edir.
// Dəyər tipinin nümunəsi - yığında saxlanılır
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 10, y: 20)
var p2 = p1 // Bütün dəyər kopyalanır

p2.x = 30 // p1 dəyişmir
print("p1: \(p1), p2: \(p2)") // Nəticə: p1: Point(x: 10, y: 20), p2: Point(x: 30, y: 20)

// İstinad tipinin nümunəsi - yığında saxlanılır
class Circle {
    var radius: Double

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

var c1 = Circle(radius: 5.0)
var c2 = c1 // Yalnız istinad kopyalanır

c2.radius = 10.0 // c1 də dəyişir, çünki ikisi də eyni obyektə işarə edir
print("c1.radius: \(c1.radius), c2.radius: \(c2.radius)") // Nəticə: c1.radius: 10.0, c2.radius: 10.0