Sobes.tech
Middle

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ə:

  • stackStruct birbaşa myFunction çərçivəsində yığışdırılır. myFunction bitdikdə, çərçivə silinir və stackStruct avtomatik təmizlənir.
  • heapObject MyClass nümunəsinə istinad edir və heapdə yerləşir. heapObject dəyişəni yığındadır. myFunction bitdikdə, heapObject istinadı 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.