Sobes.tech
Middle

Kontrollerning hayot aylari va ular qanday chaqirilishini aytib bering.

sobes.tech AI

AIdan javob

UIViewController ning hayot sikli uning mavjudligining ma'lum lahzalarida chaqiriladigan metodlarni o'z ichiga oladi: yaratishdan tortib, yo'q qilishgacha.

Hayot siklining asosiy metodlari:

  1. viewDidLoad():

    • Kontrolörning ko'rinishi xotirada yuklanganidan so'ng, lekin ekraningizda ko'rsatilishidan oldin chaqiriladi.
    • Ma'lumotlarni boshlash, UI elementlarini sozlash uchun ishlatiladi, ular ko'rinishning geometriyasiga bog'liq emas.
    • Kontrolörning hayoti davomida faqat bir marta chaqiriladi.
  2. viewWillAppear(_ animated: Bool):

    • Kontrolörning ko'rinishi ekraningizda paydo bo'lishidan oldin darhol chaqiriladi.
    • Har safar ko'rinish ko'rinadigan bo'lsa, bajarilishi kerak bo'lgan vazifalarni bajarish uchun ishlatiladi (masalan, ma'lumotlarni yangilash, animatsiyalar).
    • Bir nechta marta chaqirilishi mumkin.
  3. viewDidAppear(_ animated: Bool):

    • Kontrolörning ko'rinishi ekraningizda to'liq paydo bo'lgandan so'ng chaqiriladi.
    • Animatsiyalarni boshlash yoki ko'rinish to'liq tayyor bo'lishi kerak bo'lgan boshqa vazifalarni bajarish uchun mos keladi.
    • Bir nechta marta chaqirilishi mumkin.
  4. viewWillDisappear(_ animated: Bool):

    • Kontrolörning ko'rinishi ekraningizdan olib tashlanishidan oldin darhol chaqiriladi (masalan, boshqa ekran uchun o'tish).
    • Holatni saqlash yoki ko'rinish ko'rinmay qolganida bajarilmasligi kerak bo'lgan vazifalarni to'xtatish uchun ishlatiladi (masalan, vaqtni o'lchashni to'xtatish).
    • Bir nechta marta chaqirilishi mumkin.
  5. viewDidDisappear(_ animated: Bool):

    • Kontrolörning ko'rinishi ekraningizdan to'liq olib tashlanganidan so'ng chaqiriladi.
    • Resurslarni bo'shatish yoki ko'rinish ko'rinmay qolganida kerak bo'lmagan vazifalarni to'xtatish uchun ishlatiladi.
    • Bir nechta marta chaqirilishi mumkin.
  6. viewWillLayoutSubviews():

    • Kontrolör o'zining subviewlarini joylashtirishni boshlashdan oldin chaqiriladi.
    • Auto-layoutdan oldin constraint yoki frame'larda o'zgarishlar qilish uchun ishlatiladi.
    • Bir nechta marta chaqirilishi mumkin.
  7. viewDidLayoutSubviews():

    • Kontrolör o'zining subviewlarini joylashtirishni tugatgandan so'ng chaqiriladi.
    • Subviewlarning yakuniy o'lchamlarga bog'liq vazifalarni bajarish uchun ishlatiladi (masalan, skroll indikatorlari yoki soyalash).
    • Bir nechta marta chaqirilishi mumkin.
  8. didReceiveMemoryWarning():

    • Kam RAM bo'lsa chaqiriladi.
    • Keyinchalik qayta yaratish mumkin bo'lgan resurslarni bo'shatish uchun ishlatiladi.
  9. deinit:

    • UIViewController obyekti yo'q qilinishidan darhol oldin chaqiriladi.
    • Yakuniy tozalash uchun ishlatiladi, masalan, kuzatuvchilarni olib tashlash yoki tarmoq ulanishlarini yopish.

Chaqirilish tartibi:

Kontrolörning paydo bo'lishi paytida odatiy chaqirilish tartibi:

  1. viewDidLoad()
  2. viewWillAppear(_ animated: Bool)
  3. viewWillLayoutSubviews()
  4. viewDidLayoutSubviews()
  5. viewDidAppear(_ animated: Bool)

Kontrolörning yo'q qilinishi paytida odatiy chaqirilish tartibi:

  1. viewWillDisappear(_ animated: Bool)
  2. viewDidDisappear(_ animated: Bool)
  3. deinit (agar kontrolör endi kerak bo'lmasa)

Misol uchun amalga oshirish:

import UIKit

class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // UI sozlamalari, ma'lumotlarni boshlash
        print("viewDidLoad")
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        // Ko'rinishdan oldin UI yangilash
        print("viewWillAppear")
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // Ko'rinish to'liq paydo bo'ldi, animatsiyalarni boshlash
        print("viewDidAppear")
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // Yashirishga tayyorlanish, holatni saqlash
        print("viewWillDisappear")
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        // Yashirish tugadi, tozalash
        print("viewDidDisappear")
    }
    
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        // Auto-layoutdan oldin
        print("viewWillLayoutSubviews")
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        // Auto-layoutdan keyin
        print("viewDidLayoutSubviews")
    }

    deinit {
        // Resurslarni tozalash
        print("deinit")
    }
}