Sobes.tech
Junior — Middle

Swift dasturlashda yuzaga kelishi mumkin bo'lgan asosiy xotira oqish turlarini sanab o'ta olasizmi?

sobes.tech AI

AIdan javob

Swiftda asosiy xotira oqishi turlari, ob'ektlar bir-birini ushlab turadigan tsiklik havolalar (retain cycles) bilan bog'liq bo'lib, ARC (Automatic Reference Counting) xotirani bo'shatolmaydi. Asosiy holatlar:

  • Sinflar o'rtasidagi tsiklik havolalar: bir-biriga kuchli havolalar bilan bog'langan ikki sinf ob'ekti.
  • Self'ni ushlovchi yopilishlar: agar yopilish self'ni [weak self] yoki [unowned self] ishlatmasdan ushlasa, bu tsiklga olib keladi.
  • Delegatlarda kuchli havolalar: agar delegat kuchli havola sifatida e'lon qilingan bo'lsa va delegat ob'ekti orqaga murojaat qilsa.

Yopilish bilan xatolik misoli:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // self'ni kuchli havola bilan ushlash
        }
    }
}

Buning oldini olish uchun, zaif havolalar ishlatiladi:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

Shu tarzda, asosiy narsa kuchli havolalarni nazorat qilish va zarur bo'lsa, zaif yoki mulkchiliksiz havolalarni ishlatishdir.