Sobes.tech
Middle

Nima uchun biz viewDidUnload usulida IBOutlet'larni bo'shatishimiz kerak?

sobes.tech AI

AIdan javob

viewDidUnload kontrolörning ko'rinishini xotiradan chiqarilgandan so'ng, odatda resurslar yetishmasligi sababli chaqiriladi. Bu metodda, biz UI elementlariga havola tutadigan IBOutlet'larni (nil yoki deallocate) bo'shatamiz, shunda kuchli havola aylanishlarini buzamiz va bu elementlar tomonidan egallanadigan xotira bo'shatiladi. Bu xotira oqib ketishini oldini oladi.

class ViewController: UIViewController {

    @IBOutlet weak var myLabel: UILabel!

    override func viewDidUnload() {
        super.viewDidUnload()
        // Asosiy ko'rinishning ushlab qolingan sub-viewslarini bo'shatish.
        // masalan, self.myOutlet = nil;
        myLabel = nil // IBOutlet'ni bo'shatamiz
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        // UI elementlarini bu yerda qayta yaratish mumkin
        if myLabel == nil {
            // Kerak bo'lsa, labelni qayta yaratish yoki initsializatsiya qilish
        }
    }
}

Muhim: iOS 6 va undan keyingi versiyalarda viewDidUnload o'chirilgan va chaqirilmaydi. Ko'rinishlar uchun xotira boshqaruvi endi avtomatik ravishda Weak Referanslar (@IBOutlet weak) va Automatic Reference Counting (ARC) yordamida amalga oshiriladi. weak sifatida belgilangan IBOutlet'lar, mos keladigan ko'rinish ob'ekti xotiradan chiqarilganda avtomatik ravishda nil bo'ladi.

Shuning uchun, zamonaviy iOS dasturlashda, viewDidUnload ichida IBOutlet'larni aniq bo'shatish zarurati yoki samarali emas.

iOS versiyasi viewDidUnload xulqi IBOutlet uchun tavsiya
iOS 6 gacha Xotiradan ko'rinish chiqarilganda chaqiriladi. nil qilish.
iOS 6+ Chaqirilmaydi. weak foydalaning.