iOS inkişafında yığın təmizlənməsi necə həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
iOS-də çağırış yığını avtomatik olaraq funksiyanın və ya metodun icrasını tamamladıqda təmizlənir. Bir funksiya bitdiyində, onun çərçivəsi (yerli dəyişənlər, arqumentlər və dönüş ünvanı) yığından silinir.
Yadda saxlanılan obyektlər üçün (məsələn, struktur və ya sadə məlumat tipləri), təmizləmə birbaşa çərçivənin silinməsi ilə həyata keçirilir.
Yadda saxlanılan və yığından istinad edilən obyektlər üçün, iOS-un avtomatik yaddaş idarəetməsi (ARC - Avtomatik Referans Sayımı) mühüm rol oynayır. ARC yığını təmizləmir, lakin obyektlərin həyat dövrünü idarə edir.
Əgər yığındakı güclü istinadla obyektə istinad edən dəyişən sahəvi sahədən çıxarsa (bu, yığından çərçivənin silinməsi zamanı baş verir), ARC avtomatik olaraq həmin obyektin referans sayını azaldır. Say 0-a çatdıqda, ARC obyektin yaddaşını azad edir.
Beləliklə, yığını təmizləmək funksiyalar tamamlandıqda birbaşa çərçivələrin silinməsi ilə həyata keçirilir və yığındakı dəyişənlər tərəfindən istinad edilən obyektlərin yaddaşı, ARC vasitəsilə dolayı yolla azad edilir.
Nümunə:
struct MyStruct {
let value: Int
}
class MyClass {
var name: String
init(name: String) {
self.name = name
print("MyClass nümunəsi \(name) yaradıldı")
}
deinit {
print("MyClass nümunəsi \(name) sərbəst buraxıldı")
}
}
func myFunction() {
let stackStruct = MyStruct(value: 10) // Yığımda yerləşir
let heapObject = MyClass(name: "Nümunə") // Yığımda yerləşir, istinad yığındadır
// ... ilə işləyirik
// Funksiya bitdikdə, stackStruct və heapObject istinadları yığından silinir
// ARC heapObject-in referans sayını azaldır. Əgər sıfırdırsa, obyekt sərbəst buraxılır.
}
myFunction() // Funksiya çağırışı
Bu nümunədə:
stackStructbirbaşamyFunctionçərçivəsində yığışdırılır.myFunctionbitdikdə, çərçivə silinir vəstackStructavtomatik təmizlənir.heapObjectMyClassnümunəsinə istinad edir və heapdə yerləşir.heapObjectdəyişəni yığındadır.myFunctionbitdikdə,heapObjectistinadı yığından silinir. Bu,MyClass("Nümunə")üçün tək güclü istinad olduğundan, ARC referans sayını sıfıra endirir vədeinitçağırır, heapdə yaddaşı azad edir.