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.myFunctionsona erdiğinde, çerçeve kaldırılır vestackStructotomatik olarak temizlenir.heapObject,MyClassörneğine bir referanstır ve heap'tedir.heapObjectdeğişkeni yığında bulunur.myFunctionsona erdiğinde,heapObjectreferansı 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.