Sobes.tech
Middle

iOS geliştirmede yığının temizlenmesi nasıl gerçekleşir?

sobes.tech yapay zeka

AI'dan gelen yanıt

iOS'taki çağrı yığını, bir fonksiyon veya metodun yürütülmesi tamamlandığında otomatik olarak temizlenir. Bir fonksiyon sona erdiğinde, onun çerçevesi (yerel değişkenler, argümanlar ve dönüş adresi) yığından kaldırılır.

Yığında depolanan nesneler (örneğin, yapılar veya basit veri tipleri) için, temizlik doğrudan çerçeve kaldırıldığında gerçekleşir.

Yığında referans verilen ve yığında tutulan nesneler için, iOS'taki otomatik bellek yönetimi (ARC - Otomatik Referans Sayımı) önemli bir rol oynar. ARC, yığını temizlemez, ancak yığında tutulan nesnelerin yaşam süresini yönetir.

Bir değişken, yığında tutulan bir nesneye güçlü bir referans içeriyorsa ve kapsam dışına çıkarsa (bu, yığından çerçeve kaldırıldığında olur), ARC otomatik olarak bu nesnenin referans sayacını azaltır. Sayacın sıfıra ulaşması durumunda, ARC nesnenin yığında kapladığı belleği serbest bırakır.

Bu nedenle, yığının temizlenmesi, fonksiyonlar tamamlandığında doğrudan çerçevelerin kaldırılmasıdır ve yığında referans verilen nesnelerin bellekleri, yığındaki değişkenler tarafından referans gösterildiği için, dolaylı olarak ARC tarafından serbest bırakılır.

Örnek:

struct MyStruct {
    let value: Int
}

class MyClass {
    var name: String

    init(name: String) {
        self.name = name
        print("MyClass örneği \(name) oluşturuldu")
    }

    deinit {
        print("MyClass örneği \(name) serbest bırakıldı")
    }
}

func myFunction() {
    let stackStruct = MyStruct(value: 10) // Yığında depolanır
    let heapObject = MyClass(name: "Örnek") // Yığında referans, nesne heap'te

    // ... ile çalışıyoruz

    // Fonksiyon sona erdiğinde, stackStruct ve heapObject referansı yığından kaldırılır
    // ARC, heapObject'in referans sayacını azaltır. Sıfıra ulaşırsa, nesne serbest bırakılır.
}

myFunction() // Fonksiyon çağrısı

Bu örnekte:

  • stackStruct, myFunction çerçevesi içinde doğrudan yığında depolanır. myFunction sona erdiğinde, çerçeve kaldırılır ve stackStruct otomatik olarak temizlenir.
  • heapObject, MyClass örneğine bir referanstır ve heap'tedir. heapObject değişkeni yığında bulunur. myFunction sona erdiğinde, heapObject referansı yığından kaldırılır. Bu, MyClass("Örnek") örneğine güçlü referansın tek olduğu durumdur, ARC referans sayacını sıfıra düşürür, deinit çağrılır ve heap'teki bellek serbest bırakılır.