iOS-da ViewController Lifecycle: asosiy tushunchalar, bosqichlar va metodlar

Muallif: IT Sectr Nashr etilgan: 2026-03-05 O'qish vaqti: 9 daq

ViewController Lifecycle — bu iOS-da UIKit tomonidan ekranlarni boshqarishda avtomatik chaqiriladigan metodlar ketma-ketligidir. Apple Documentation-ga ko‘ra, har bir UIViewController oldindan bashorat qilinadigan holatlar to‘plamidan o‘tadi: View yaratilishidan to uning paydo bo‘lishi va yashirinishigacha. Ushbu metodlarning tartibi va maqsadini tushunish iOS ilovasining barqaror ishlashi uchun zarur shartdir.

Asosiy

  • ViewController Lifecycle — UIKit tomonidan qat’iy tartibda chaqiriladigan oltita UIViewController metodi
  • loadView Storyboard ishlatilmasa, View iyerarxiyasini yaratadi
  • viewDidLoad bir marta chaqiriladi va ekranni dastlabki sozlash uchun mos keladi
  • viewWillAppear va viewDidAppear har bir paydo bo‘lishda ishlaydi
  • viewWillDisappear va viewDidDisappear — holatni saqlash va tozalash uchun

ViewController Lifecycle nima

ViewController Lifecycle — bu UIViewController o‘z mavjudligi davomida UIKitdan oladigan metodlar to‘plamidir. iOS ilovasidagi har bir ekran ketma-ket yaratish, View-ni yuklash, ekranda paydo bo‘lish, yo‘qolish va xotirani bo‘shatish bosqichlaridan o‘tadi. UIKit har bir bosqichda tegishli metodlarni avtomatik chaqiradi va dasturchi ularni bekor qilib, o‘z mantiqini qo‘shadi.

UIViewController arxitekturasi UIKit-ning asosini tashkil qiladi va SwiftUI davrida ham dolzarbligini saqlaydi — ko‘plab loyihalar hali ham klassik yondashuv yoki gibrid arxitekturadan foydalanadi. Lifecycle-ni tushunish subviews qaysi momentda mavjudligini, layout-ni qachon xavfsiz o‘zgartirish mumkinligini va ekranning paydo bo‘lishi yoki yashirinishida qanday operatsiyalarni bajarishni bashorat qilish imkonini beradi.

Hayotiy sikl metodlarining har biri aniq maqsadga ega: ba‘zilari boshqaruvchining butun mavjudligi davomida bir marta, boshqalari esa har bir paydo bo‘lish yoki yo‘qolishda chaqiriladi. Metodlar o‘rtasida mantiqni aralashtirish qiyin aniqlanadigan xatolarga olib keladi: xotira oqishi, noto‘g‘ri ma‘lumot yangilanishi va keraksiz tarmoq so‘rovlari.

UIViewController metodlarining to‘liq sikli

Oltita metod UIViewController-ning to‘liq hayotiy siklini tashkil qiladi. Ularning chaqirilish tartibi qat’iy va navigatsiya usuliga bog‘liq emas — push, present yoki unwind segue bir xil jadvalga amal qiladi.

loadView — ildiz View yaratish

loadView — siklning birinchi metodi, boshqaruvchining View i hali mavjud bo‘lmaganda chaqiriladi. Agar Storyboard ishlatsangiz, UIKit avtomatik ravishda View-ni xib faylidan yuklaydi. Interfeysni dasturiy yaratishda siz ushbu metodni bekor qilib, ildiz View-ni qo‘lda tayinlaysiz. Ko‘pchilik loyihalarda loadView-ga tegilmaydi — ish viewDidLoad-da bajariladi.

loadView-ni bekor qilish faqat maxsus holatlarda talab qilinadi: butun interfeys Storyboard-siz kod bilan yaratilganda yoki ildiz View nostandart sinfdan bo‘lishi kerak bo‘lganda. Apple bekor qilishda super.loadView-ni chaqirmaslikni tavsiya qiladi — View yaratilishini to‘liq o‘z zimmangizga olasiz.

swift
override func loadView() {
    view = UIView()
    view.backgroundColor = .white
}

viewDidLoad — bir martalik initsializatsiya

viewDidLoad — siklning eng ko‘p ishlatiladigan metodi. View xotiraga yuklangandan so‘ng, lekin hali ekranda ko‘rsatilmagan bir marta chaqiriladi. Bu erda subviews sozlanadi, jadvallar ma‘lumotlar bilan to‘ldiriladi, hujayralar ro‘yxatdan o‘tkaziladi va boshqaruvchining butun umri davomida ishlaydigan bildirishnomalarga obuna bo‘linadi.

Muhim xususiyat: viewDidLoad ekran qayta ko‘rsatilganda qayta chaqirilmaydi. Agar har safar paydo bo‘lishda ma‘lumotlarni yangilash kerak bo‘lsa — viewWillAppear-dan foydalaning. viewDidLoad-da faqat asosiy konfiguratsiyaga bog‘liq bo‘lgan bir martalik operatsiyalarni joylashtiring.

viewWillAppear — ko‘rsatishdan oldin tayyorgarlik

viewWillAppear har safar View foydalanuvchi uchun ko‘rinadigan bo‘lishidan oldin chaqiriladi. Ushbu metod animated parametrini oladi, bu ko‘rinish animatsiya bilan sodir bo‘layotganligini ko‘rsatadi. Bu erda ma‘lumotlar yangilanadi, jadvallar qayta yuklanadi, NavigationBar sozlanadi va ilova holatiga qarab elementlar yashiriladi yoki ko‘rsatiladi.

viewWillAppear-dan ekranlar o‘rtasida holatni sinxronlashtirish uchun foydalaning: agar foydalanuvchi oldingi ekranda ma‘lumotlarni o‘zgartirgan bo‘lishi mumkin bo‘lsa, bu metod interfeysni yangilash uchun to‘g‘ri joydir. Har bir viewWillAppear chaqiruvi, hatto bola boshqaruvchidan qaytganda ham, ekran paydo bo‘lishidan oldin sodir bo‘ladi.

viewDidAppear — ekran to‘liq ko‘rinadi

viewDidAppear View ekranda to‘liq paydo bo‘lganini va barcha o‘tish animatsiyalari tugaganini bildiradi. Bu momentda ekran o‘zaro aloqaga tayyor — foydalanuvchi to‘liq interfeysni ko‘radi va u bilan ishlashi mumkin. Ushbu metod paydo bo‘lgandan keyin boshlanishi kerak bo‘lgan animatsiyalarni ishga tushirish, taymerlarni boshlash va analitika ko‘rishlarini kuzatish uchun mos keladi.

viewWillAppear-dan farqli o‘laroq, viewDidAppear ekran nafaqat ko‘rinadigan, balki to‘liq renderlanganligini kafolatlaydi. Agar animatsiyani viewWillAppear-da boshlasangiz, ba‘zi kadrlar o‘tkazib yuborilishi mumkin, chunki UIKit hali o‘tishni tugatmagan. Silliq animatsiyalar uchun viewDidAppear-dan foydalaning.

viewWillDisappear — yashirishga tayyorgarlik

viewWillDisappear View ekrandan yo‘qolishidan oldin chaqiriladi — boshqa boshqaruvchiga o‘tish, modal oynani yopish yoki ilovani minimallashtirishda. Bu holatni saqlash, bildirishnomalardan chiqish, faol jarayonlarni to‘xtatish va ekran ko‘rinmasa kerak bo‘lmagan resurslarni bo‘shatish uchun to‘g‘ri joy.

Eslash muhim: viewWillDisappear View oxir-oqibat yo‘qolishiga kafolat bermaydi — jest bekor qilinishi mumkin. Shuning uchun muhim ma‘lumotlarni faqat haqiqiy yo‘qolishdan keyin chaqiriladigan viewDidDisappear-da ham saqlang.

viewDidDisappear — ekran yashirildi

viewDidDisappear paydo bo‘lish va yo‘qolish siklini yakunlaydi. View ekrandan allaqachon yashirilganidan keyin chaqiriladi. Ushbu metodda animatsiyalar butunlay to‘xtatiladi, vaqtinchalik obektlar o‘chiriladi va viewWillDisappear-da boshlangan ma‘lumotlarni saqlash tasdiqlanadi.

Ushbu metod shuningdek boshqaruvchining deinit-idan oldin keladi — agar UIViewController yo‘q qilinsa, viewDidDisappear deinit chaqirilishidan oldin Lifecycle-ning oxirgi metodi bo‘ladi. Obekt yo‘q qilinishidan oldin sodir bo‘lishi kerak bo‘lgan yakuniy tozalash uchun foydalaning.

Har bir metod qachon chaqiriladi

Chaqirilish tartibi ekranning qanday paydo bo‘lishiga bog‘liq: birinchi marta, qaytishda yoki modal ko‘rinishda. UIKit nuqtai nazaridan uchta asosiy stsenariyni ko‘rib chiqamiz.

Birinchi ochilishdagi tartib

Ekranning birinchi paydo bo‘lishida UIKit to‘liq yaratish siklidan o‘tadi: loadView, keyin viewDidLoad chaqiriladi, so‘ng paydo bo‘lish animatsiyasi boshlanadi. Animatsiya davomida viewWillAppear, tugaganidan keyin esa viewDidAppear chaqiriladi. Bu loadView-dan viewDidAppear-gacha barcha metodlar ketma-ket chaqiriladigan yagona stsenariydir.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    print("viewDidLoad — View xotiraga yuklandi")
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    print("viewWillAppear — tez orada paydo bo‘ladi")
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    print("viewDidAppear — ekran to‘liq ko‘rinadi")
}

Qaytishdagi tartib

Foydalanuvchi oldingi ekranga qaytganda, UIKit viewDidLoad-ni qayta chaqirmaydi — View allaqachon xotiraga yuklangan. Buning o‘rniga qaytgan ekranda faqat viewWillAppear va viewDidAppear, joriy ekranda esa viewWillDisappear va viewDidDisappear ishlaydi. loadView va viewDidLoad o‘tkazib yuboriladi, chunki ekran navigatsiya stekida allaqachon mavjud.

Present va dismiss xususiyatlari

Modal ko‘rinish bir xil qoidalarga bo‘ysunadi: yangi boshqaruvchi birinchi paydo bo‘lishda to‘liq sikldan o‘tadi, joriy esa viewWillDisappear va viewDidDisappear chaqiradi. Dismissda tartib teskari: qaytgan boshqaruvchida viewWillAppear va viewDidAppear, yashirilganda esa yakunlovchi metodlar ishlaydi. Bu xatti-harakat UIKit-dagi barcha o‘tish turlari uchun yagonadir.

Amaliy foydalanish stsenariylari

Lifecycle-ni tushunish kod sifati va foydalanuvchi tajribasiga bevosita ta‘sir qiladigan to‘rtta asosiy stsenariyni ko‘rib chiqamiz. Har bir stsenariy uchun tavsiyalar bilan misol keltiramiz.

viewDidLoad-da ma‘lumotlarni initsializatsiya qilish

viewDidLoad — ekranning ko‘rinishiga bog‘liq bo‘lmagan dastlabki sozlash uchun joy. Bu erda collectionView sozlanadi, hujayralar uchun nib fayllari ro‘yxatdan o‘tkaziladi, data source va layout yaratiladi. Agar tarmoqdan ma‘lumot yuklasangiz, viewDidLoad-da faqat so‘rovni boshlash, interfeysni esa ekran ko‘rsatishga tayyor bo‘lganda viewWillAppear-da yangilash yaxshiroq.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    tableView.register(
        MyCell.self,
        forCellReuseIdentifier: MyCell.identifier
    )
    viewModel.loadInitialData()
}

viewWillAppear-da tarkibni yangilash

Har safar ekran paydo bo‘lganda ma‘lumotlarni sinxronlashtirish uchun viewWillAppear-dan foydalaning. Masalan, foydalanuvchi oldingi ekranda sozlamalarni o‘zgartirgan bo‘lishi mumkin bo‘lsa, bu erda ko‘rsatilgan qiymatlar yangilanadi, jadval qayta yuklanadi va NavigationBar holati tuzatiladi. Bu ekran har qanday navigatsiya stsenariysida doimo dolzarb ma‘lumotlarni ko‘rsatishini kafolatlaydi.

swift
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    tableView.reloadData()
    navigationController?.setNavigationBarHidden(false, animated: animated)
}

viewDidAppear-da analitika va animatsiyalar

viewDidAppear foydalanuvchi ekranni ko‘rganidan keyin boshlanishi kerak bo‘lgan animatsiyalarni ishga tushirish uchun idealdir. Bu erda shuningdek analitika hodisalari yuboriladi: ekran ko‘rinishi, onboarding boshlanishi yoki video ijro etishning boshlanishi. O‘tish tugashidan oldin animatsiyalarni boshlash silkinadigan interfeysga olib keladi — UIKit yetarli kadrlarni tayyorlashga ulgurmaydi.

viewWillDisappear-da holatni saqlash

viewWillDisappear-da qoralama versiyalar saqlanadi, taymerlar to‘xtatiladi va NotificationCenter-dan chiqiladi. Bu ekran hali ko‘rinadigan va foydalanuvchi kontekstini talab qiladigan operatsiyalar uchun mavjud bo‘lgan so‘nggi momentdir. Muhim ma‘lumotlar uchun qo‘shimcha ravishda bekor qilingan jestlardan himoya sifatida viewDidDisappear ishlatiladi.

Lifecycle bilan ishlashda odatiy xatolar

Hayotiy sikl metodlarining noto‘g‘ri ishlatilishi iOS ilovalaridagi xatolarning eng keng tarqalgan manbalaridan biridir. UIViewController bilan ishlashning turli bosqichlarida dasturchilar yo‘l qo‘yadigan asosiy xatolarni ko‘rib chiqamiz.

Birinchi xato — Storyboard mavjud bo‘lganda init yoki loadView-da subviews yaratish. Agar Interface Builder ishlatsangiz, loadView-ni keraksiz bekor qilmang. Mavjud storyboard bilan loadView-da View yaratish xib faylining e‘tiborsiz qoldirilishiga va bo‘sh ekranga olib keladi.

Ikkinchi xato — viewDidLoad-da klaviatura bildirishnomalariga obuna bo‘lib, chiqmaslik. Agar UIResponder.keyboardWillShowNotification-ga obuna bo‘lgan bo‘lsangiz, lekin ekran yashirilganda chiqmagan bo‘lsangiz, blok boshqaruvchining deinit-dan keyin ham chaqiriladi — bu ilovaning potensial qulashi bilan xotira oqishidir.

Uchinchi xato — ekran paydo bo‘lishidan oldin ishga tushirilgan taymerlar va tarmoq so‘rovlari. View hali ko‘rinmasa, rasmlarni yuklash yoki animatsiyalarni bajarish resurslarni behuda sarflashdir. Vizual yangilanishlarni viewWillAppear yoki viewDidAppear-ga ko‘chiring.

To‘rtinchi xato — ma‘lumotlarni faqat viewWillDisappear-da saqlash. Interaktiv pop jestida foydalanuvchi surishni boshlab, bekor qilishi mumkin — metod chaqirildi, lekin ekran yo‘qolmadi. Muhim ma‘lumotlarni saqlashni viewDidDisappear-da yoki applicationDidEnterBackground handlerida takrorlang.

Tez-tez beriladigan savollar

viewDidLoad boshqaruvchining hayoti davomida necha marta chaqiriladi?

Bir marta — View xotiraga yuklanganidan keyin. Ekranning qayta paydo bo‘lishida viewDidLoad chaqirilmaydi. Agar View-ni qayta yaratish kerak bo‘lsa, boshqaruvchi yo‘q qilinishi va qayta yaratilishi kerak.

viewDidLoad-da super chaqirilmasa nima bo‘ladi?

UIKit hayotiy siklning to‘g‘ri ishlashi uchun super.viewDidLoad chaqirilishini talab qiladi. Busiz layout yangilanishi va o‘tishlarni qayta ishlash bilan bog‘liq muammolar yuzaga kelishi mumkin. Har doim metodda birinchi bo‘lib super-ni chaqiring.

Storyboard va dasturiy loadView bir vaqtda ishlatilishi mumkinmi?

Tavsiya etilmaydi. Boshqaruvchi Storyboard-dan initsializatsiya qilingan bo‘lsa, UIKit avtomatik ravishda View-ni xib-dan yuklaydi. loadView-ni bekor qilish bu jarayonni bekor qiladi va sizning storyboardingiz e‘tiborsiz qoldiriladi.

NotificationCenter-dan qanday to‘g‘ri chiqish mumkin?

viewDidLoad yoki viewWillAppear-da obuna bo‘ling va viewWillDisappear yoki viewDidDisappear-da chiqing, yopilishlarda xotira oqishining oldini olish uchun self-ga zaif havoladan foydalaning.

Nega force quit paytida viewDidDisappear chaqirilmaydi?

Force quit jarayonni majburiy ravishda to‘xtatadi — UIKit Lifecycle metodlarini chaqirishga ulgurmaydi. Ma‘lumotlarni saqlash uchun AppDelegate-da UIApplication.willTerminateNotification bildirishnomasidan foydalaning.

Xulosa

  • ViewController Lifecycle UIKit tomonidan qat’iy tartibda chaqiriladigan oltita metodadan iborat
  • loadView va viewDidLoad boshqaruvchi yaratilganda bir marta ishlaydi
  • viewWillAppear va viewDidAppear ekran har paydo bo‘lganda chaqiriladi
  • viewWillDisappear va viewDidDisappear — har yashirinishda
  • Har bir metodning aniq maqsadi bor — mantiqni aralashtirish xatolarga olib keladi
  • Bildirishnomalarga obuna har doim tegishli metodda chiqish bilan muvozanatlanadi
  • Animatsiyalar va analitika uchun viewDidAppear, holatni saqlash uchun viewWillDisappear dan foydalaning

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing