Sobes.tech
Middle

iOS dasturlashda stekni qanday tozalash amalga oshiriladi?

sobes.tech AI

AIdan javob

iOS'da chaqiriqlar steki funksiyalar yoki metodlar bajarilishini tugatgach avtomatik tarzda tozalanadi. Funktsiya tugagach, uning ramkasi (mahalliy o'zgaruvchilar, argumentlar va qaytish manzili) stekdan olib tashlanadi.

Stekda saqlangan ob'ektlar (masalan, tuzilmalar yoki oddiy ma'lumot turlari) uchun tozalash to'g'ridan-to'g'ri ramka olib tashlanganda amalga oshadi.

Stekda ko'rsatilgan va stekdan foydalaniladigan ob'ektlar uchun, iOS'dagi avtomatik xotira boshqaruvi (ARC - Avtomatik Referenslar Hisobi) muhim rol o'ynaydi. ARC stekni tozalashni amalga oshirmaydi, lekin ob'ektlarning hayot davrini boshqaradi.

Agar stekdagi referensga ega bo'lgan ob'ektga kuchli referens saqlanayotgan bo'lsa va u doirasidan chiqsa (bu stekdan ramka olib tashlanganda yuzaga keladi), ARC avtomatik ravishda bu ob'ektning referenslar hisobini kamaytiradi. Agar hisob nolga teng bo'lsa, ARC ob'ektning xotirasini bo'shatadi.

Shunday qilib, stekni tozalash funksiyalar tugagach to'g'ridan-to'g'ri ramkalarni olib tashlash bilan amalga oshiriladi, va stekdagi o'zgaruvchilar tomonidan ko'rsatilgan ob'ektlar uchun xotira bo'shatish, ularning xotira ob'ektlariga referenslar orqali amalga oshiriladi va bu ARC yordamida amalga oshiriladi.

Misol:

struct MyStruct {
    let value: Int
}

class MyClass {
    var name: String

    init(name: String) {
        self.name = name
        print("MyClass instance \(name) yaratildi")
    }

    deinit {
        print("MyClass instance \(name) bo'shatildi")
    }
}

func myFunction() {
    let stackStruct = MyStruct(value: 10) // Stekda joylashgan
    let heapObject = MyClass(name: "Misol") // Heapda joylashgan, stekda referens

    // ... bilan ishlash

    // Funktsiya tugagach, stackStruct va heapObject referenslari stekdan olib tashlanadi
    // ARC heapObject uchun referenslar hisobini kamaytiradi. Agar nolga teng bo'lsa, ob'ekt bo'shatiladi.
}

myFunction() // Funktsiya chaqiruvi

Ushbu misolda:

  • stackStruct to'g'ridan-to'g'ri myFunction ichida stekda joylashgan. myFunction tugagach, ramka olib tashlanadi va stackStruct avtomatik tozalanadi.
  • heapObject - MyClass instansiyasiga referens, u heapda joylashgan. heapObject o'zgaruvchisi stekda. myFunction tugagach, heapObject referensi stekdan olib tashlanadi. Bu, MyClass("Misol") uchun yagona kuchli referens bo'lsa, ARC referenslar hisobini nolga tushiradi va deinit chaqiradi, heapdagi xotira bo'shatiladi.