viewDidLoad iOS-da: bu nima, maqsadi va kod misollari

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

viewDidLoad — UIKit UIViewController-ning View-ni xotiraga yuklagandan so'ng chaqiradigan birinchi metoddir. Apple Developer Documentation ga ko'ra, bu metod kontroller mavjud bo'lgan vaqt davomida atigi bir marta chaqiriladi. viewDidLoad interfeysni dastlabki sozlash, hujayralarni ro'yxatdan o'tkazish va ma'lumotlarni ishga tushirish uchun asosiy joydir.

Asosiy fikrlar

  • viewDidLoad View xotiraga yuklangandan so'ng bir marta chaqiriladi
  • super.viewDidLoad majburiy — usiz Lifecycle buziladi
  • Bu metodda UI sozlanadi, hujayralar ro'yxatdan o'tkaziladi va data source yaratiladi
  • Qayta chaqirilmaydi ekranga qaytganda — viewWillAppear dan foydalaning
  • Bir martalik operatsiyalar va doimiy bildirishnomalarga obuna bo'lish uchun mos

viewDidLoad nima

viewDidLoad — UIKit kontrollerning View-i operativ xotiraga yuklangandan so'ng darhol chaqiradigan UIViewController namunaviy metodidir. Bu vaqtda barcha IBOutlet xususiyatlari interfeys elementlari bilan bog'langan, ammo View hali oyna iyerarxiyasiga qo'shilmagan va foydalanuvchiga ko'rinmaydi. Dasturchi ekranni dastlabki sozlashni amalga oshirish uchun ushbu metodni qayta yozadi.

Metod ViewController Lifecycle ning bir qismidir va View dasturiy ravishda yaratilsa loadView dan so'ng yoki Storyboard dan yuklangandan so'ng darhol keladi. Oddiy loyihada viewDidLoad eng ko'p qayta yoziladigan UIViewController metodidir, chunki u allaqachon mavjud va sozlashga tayyor bo'lgan subviews bilan ishlash uchun xavfsiz nuqta taqdim etadi.

Muhim tafsilot: viewDidLoad chaqirilgan paytda View o'lchamlari hali yakuniyga mos kelmaydi — Auto Layout o'tishlarni tugatmagan va frame kutilganidan farq qilishi mumkin. O'lchamlarga bog'liq hisob-kitoblar uchun viewDidLayoutSubviews ishlatiladi.

viewDidLoad qachon chaqiriladi

viewDidLoad ning chaqirilish vaqti kontrollerning qanday ishga tushirilishiga bog'liq. Ko'p hollarda UIKit bu metodni kontrollerning view xususiyatiga birinchi murojaat qilishda avtomatik chaqiradi — bu UIViewController ning lazy-loading mexanizmi deb ataladi.

Ekranning birinchi ochilishida

NavigationController yoki TabBarController ekraningizni birinchi marta ko'rsatganda, UIKit View yuklangan yoki yo'qligini tekshiradi. Agar yuklanmagan bo'lsa — loadView (yoki Storyboard dan yuklash) chaqiriladi, so'ngra darhol viewDidLoad ishga tushadi. Bu standart stsenariy va kontrollerning har bir namunasi uchun bir marta sodir bo'ladi.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    print("View yuklandi — interfeysni sozlash mumkin")
    setupUI()
    configureTableView()
}

Mavjud ekranga qaytganda

viewDidLoad qayta chaqirilmaydi back button yoki dismiss orqali ekranga qaytganda. Agar mantiqingiz ekranning qayta paydo bo'lishiga bog'liq bo'lsa — uni viewWillAppear ga joylashtiring. Bu eng keng tarqalgan kontseptual xatolardan biridir: dasturchilar viewDidLoad har ko'rsatishda ishga tushishini kutadilar, ammo UIKit uni faqat bir marta chaqiradi.

ForcedViewLoad paytida

Ba'zan dasturchilar yuklashni oldindan boshlash uchun kontrollerning view-ni majburan chaqiradilar: let _ = controller.view. Bu kontroller ekranda paydo bo'lishidan oldin loadView va viewDidLoad ni majbur qiladi. Bunday usul silliq o'tish uchun View-ni oldindan tayyorlash kerak bo'lganda qo'llaniladi.

viewDidLoad da nima qilinadi

viewDidLoad ekranning ko'rinishiga bog'liq bo'lmagan bir martalik sozlash operatsiyalari uchun mo'ljallangan. Ushbu metodning to'g'ri ishlatilishi toza arxitektura va kontrollerning bashorat qilinadigan xatti-harakatining kalitidir.

UI komponentlarini sozlash

viewDidLoad da UITableView va UICollectionView uchun nib fayllari va sinflar ro'yxatdan o'tkaziladi, delegatlar sozlanadi, UI elementlari xususiyatlarining boshlang'ich qiymatlari belgilanadi. Barcha IBOutlet lar bu vaqtda allaqachon bog'langanligi sababli, label.text, imageView.image va boshqa subviews xususiyatlariga xavfsiz murojaat qilish mumkin.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.delegate = self
    tableView.register(
        CustomCell.self,
        forCellReuseIdentifier: CustomCell.identifier
    )
    title = "Bosh ekran"
}

Ma'lumotlarni ishga tushirish va obunalar

Bu yerda viewModel yaratiladi, data source massivlar bilan ishga tushiriladi, kontrollerning butun hayoti davomida faoliyat ko'rsatishi kerak bo'lgan bildirishnomalarga obuna bo'linadi. Masalan, fondan qaytganda ma'lumotlarni yangilash uchun UIApplication.willEnterForegroundNotification obunasi viewDidLoad uchun mos nomzoddir. Zamonaviy iOS arxitekturasida ViewModel kontroller bilan biznes mantiq o'rtasidagi bog'lovchi rolini o'ynaydi va uning aynan viewDidLoad da ishga tushirilishi ekranning birinchi paydo bo'lishida ma'lumotlarning tayyorligini ta'minlaydi.

Jadval va kolleksiyalar uchun data source sozlashga alohida e'tibor bering. Jadvalingiz Core Data bilan UIFetchedResultsController yoki NSFetchedResultsController dan foydalansa, fetch request va delegatni viewDidLoad da ishga tushiring. Bu ekranning birinchi paydo bo'lishida jadval qo'shimcha so'rovlarsiz ma'lumotlar bilan to'ldirilgan bo'lishini kafolatlaydi.

Navigatsiyani sozlash

viewDidLoad da NavigationBar tugmalari konfiguratsiya qilinadi, large title o'rnatiladi, search controller qo'shiladi va edit/done tugmalari sozlanadi. Ushbu elementlar ekranning takroriy ko'rsatilishida kamdan-kam o'zgaradi, shuning uchun ularni bu yerda ishga tushirish optimaldir.

viewDidLoad da nima qilmaslik kerak

Barcha operatsiyalar viewDidLoad uchun mos emas. Ushbu metodga joylashtirilgan ba'zi harakatlar haddan tashqari xotira sarfiga, noto'g'ri xatti-harakatga yoki ekranning takroriy ko'rsatilishida xatolarga olib keladi.

Faqat UI ga ta'sir qiladigan tarmoq so'rovlarini ishga tushirishdan saqlaning. Agar so'rov ekran paydo bo'lishidan oldin tugallansa, foydalanuvchi natijani ko'rmaydi, agar keyin tugallansa — ma'lumotlar eskirgan bo'lishi mumkin. Yuklashni viewDidLoad da boshlang, lekin UI ni viewWillAppear da yangilang.

View o'lchamlari va joylashuviga bog'liq operatsiyalarni viewDidLoad da bajarmang. Chaqiruv paytida Auto Layout o'tishlarni tugatmagan va frame yakuniy bo'lmasligi mumkin. Hisob-kitoblar uchun viewDidLayoutSubviews dan foydalaning yoki updateViewConstraints ni qayta yozing.

Faqat ekran ko'rinadigan vaqtda faol bo'lgan bildirishnomalarga obuna bo'lmang. Klaviatura bildirishnomalari, bola kontrollerlar tarkibining o'zgarishi haqidagi bildirishnomalar — ularga viewWillAppear da obuna bo'ling va viewDidDisappear da obunani bekor qiling, keraksiz chaqiruvlar va xotira sizib ketishining oldini olish uchun.

Ko'rinadigan ekranni talab qiladigan metodlarni chaqirmang. Masalan, viewDidLoad dan UIAlertController ko'rsatishga urinish xatoga olib keladi, chunki kontrollerning View hali oyna iyerarxiyasiga qo'shilmagan. Window yoki presentedViewController ga bog'liq barcha UI operatsiyalari faqat ekran paydo bo'lgandan keyin bajarilishi kerak.

Og'ir resurslarni ehtiyojsiz ishga tushirmang. Agar ekran kamdan-kam ochilsa yoki ma'lumotlar darhol ko'rsatilmasa, resurs talab qiladigan obyektlarni yaratishni ular haqiqatan kerak bo'lgan paytgacha kechiktiring. Swift da xususiyatlarning Lazy-inisializatsiyasi bu vazifani hal qilish uchun o'rnatilgan mexanizmdir: lazy modifikatoriga ega xususiyat faqat birinchi murojaatda yaratiladi, bu xotirani tejaydi va ekran yuklanishini tezlashtiradi.

viewDidLoad dan ekranning har ko'rinishida bajarilishi kerak bo'lgan operatsiyalar uchun foydalanmang. Bu eng fundamental xatodir: boshlang'ich dasturchilar ko'pincha ma'lumotlarni yangilash mantiqini viewDidLoad ga joylashtiradilar va boshqa ekrandan qaytganda jadvalning qayta yuklanmasligiga hayron bo'ladilar. Agar operatsiya har ko'rsatishda takrorlanishi kerak bo'lsa — viewWillAppear dan foydalaning. Agar hayot davomida bir marta bajarilishi kerak bo'lsa — viewDidLoad dan. UIViewController ning hayot tsikli bilan bog'liq muammolarning aksariyatidan qochish uchun ushbu oddiy qoidani esda saqlang.

viewDidLoad bilan kod misollari

Haqiqiy loyihalarda viewDidLoad dan to'g'ri foydalanishni ko'rsatadigan uchta amaliy misolni ko'rib chiqamiz. Har bir misol ekranni sozlashning aniq vazifasini hal qiladi.

Misol 1: maxsus hujayralar bilan kolleksiyani sozlash

swift
override func viewDidLoad() {
    super.viewDidLoad()
    collectionView.register(
        PhotoCell.self,
        forCellWithReuseIdentifier: PhotoCell.reuseId
    )
    collectionView.register(
        HeaderView.self,
        forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader,
        withReuseIdentifier: HeaderView.reuseId
    )
    viewModel.delegate = self
    viewModel.fetchInitialPage()
}

Misol 2: constraint larni dasturiy sozlash

swift
override func viewDidLoad() {
    super.viewDidLoad()
    let label = UILabel()
    label.text = "Salom, dunyo!"
    label.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(label)

    NSLayoutConstraint.activate([
        label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        label.centerYAnchor.constraint(equalTo: view.centerYAnchor)
    ])
}

Misol 3: bo'sh holat va loader sozlash

viewDidLoad da shuningdek, ma'lumotlar bo'lmaganda ko'rsatiladigan elementlar sozlanadi: bo'sh holat, loader, placeholder. Ushbu komponentlar bir marta yaratiladi va ekranning har ko'rinishida qayta ishlatiladi. Ushbu elementlarni yashirish yoki ko'rsatish joriy ma'lumotlarga qarab viewWillAppear da boshqariladi.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    emptyStateLabel = UILabel()
    emptyStateLabel.text = "Ma'lumot yo'q"
    emptyStateLabel.textAlignment = .center
    emptyStateLabel.isHidden = true
    view.addSubview(emptyStateLabel)

    activityIndicator = UIActivityIndicatorView(style: .medium)
    activityIndicator.hidesWhenStopped = true
    view.addSubview(activityIndicator)
}

Misol 4: ilova bildirishnomalariga obuna

swift
override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(handleEnterForeground),
        name: UIApplication.willEnterForegroundNotification,
        object: nil
    )
}

@objc private func handleEnterForeground() {
    refreshContent()
}

Tez-tez beriladigan savollar

viewDidLoad bir necha marta chaqirilishi mumkinmi?

Oddiy sharoitlarda yo'q — UIKit viewDidLoad ni View xotiraga yuklangandan so'ng bir marta chaqiradi. Agar kontroller yo'q qilinsa va qayta yaratilsa, viewDidLoad yangi namuna uchun ishga tushadi.

super.viewDidLoad chaqirish kerakmi?

Ha, albatta. super.viewDidLoad chaqiruvi UIKit Lifecycle ning to'g'ri ishlashi uchun zarur bo'lgan ichki sozlashni amalga oshirishini kafolatlaydi. Har doim super ni metodning boshida chaqiring.

viewDidLoad va viewWillAppear o'rtasidagi farq nima?

viewDidLoad View yuklanganda bir marta chaqiriladi. viewWillAppear ekranning har ko'rinishidan oldin chaqiriladi. Birinchisi — bir martalik sozlash uchun, ikkinchisi — ma'lumotlar va holatni yangilash uchun.

viewDidLoad da og'ir operatsiyalarni bajarish mumkinmi?

Og'ir sinxron operatsiyalar viewDidLoad da main thread ni bloklaydi va ekran paydo bo'lishini kechiktiradi. Asinxron yuklashlar joiz, ammo ular tugagandan so'ng UI ni yangilashda ekran allaqachon yashiringan bo'lishi mumkinligini hisobga oling.

viewDidLoad ni majburan qanday chaqirish mumkin?

To'g'ridan-to'g'ri viewDidLoad ni chaqirib bo'lmaydi — uni UIKit chaqiradi. View yuklanishini majburlash uchun controller.view xususiyatiga murojaat qiling. Bu loadView va viewDidLoad ni avtomatik ishga tushiradi.

Xulosa

  • viewDidLoad — View xotiraga yuklangandan so'ng UIViewController ni bir martalik sozlash metodi
  • View ga birinchi murojaatda kontroller hayoti davomida bir marta chaqiriladi
  • Hujayralarni ro'yxatdan o'tkazish, delegatlarni sozlash, viewModel ni ishga tushirish uchun mos
  • Lifecycle ning to'g'ri ishlashi uchun har doim super.viewDidLoad ni chaqiring
  • View o'lchamlariga bog'liq operatsiyalar uchun viewDidLoad dan foydalanmang
  • Har ko'rinishda ma'lumotlarni yangilash uchun viewWillAppear dan foydalaning
  • Doimiy bildirishnomalarga obuna — mos, vaqtinchalik — viewWillAppear da

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