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.