viewDidLoad sa iOS: ano ito, layunin at mga halimbawa ng code

May-akda: IT Sectr Nai-publish: 2026-03-05 Oras ng pagbabasa: 8 min

viewDidLoad — ay ang unang paraan na tinatawag ng UIKit pagkatapos na ma-load ang View ng UIViewController sa memorya. Ayon sa Apple Developer Documentation, ang paraang ito ay tinatawag nang eksaktong isang beses sa buong panahon ng pag-iral ng controller. viewDidLoad ang pangunahing lugar para sa paunang pagsasaayos ng interface, pagrehistro ng mga cell at pagsisimula ng data.

Mga Pangunahing Punto

  • viewDidLoad ay tinatawag nang isang beses pagkatapos ma-load ang View sa memorya
  • super.viewDidLoad ay kinakailangan — kung wala ito, nasisira ang Lifecycle
  • Sa paraang ito, ang UI ay isinaayos, ang mga cell ay nirerehistro at ang data source ay ginagawa
  • Hindi na tinatawag muli kapag bumalik sa screen — gamitin ang viewWillAppear
  • Angkop para sa isang beses na mga operasyon at pag-subscribe sa permanenteng mga notification

Ano ang viewDidLoad

viewDidLoad — ay isang paraan ng instance ng UIViewController na tinatawag ng UIKit kaagad pagkatapos ma-load ang View ng controller sa RAM. Sa sandaling ito, lahat ng mga property ng IBOutlet ay konektado na sa mga elemento ng interface, ngunit ang View ay hindi pa naidaragdag sa hierarchy ng window at hindi nakikita ng gumagamit. Ang developer ay nag-o-override ng paraang ito upang gawin ang paunang pagsasaayos ng screen.

Ang paraan ay bahagi ng ViewController Lifecycle at sumusunod kaagad pagkatapos ng loadView, kung ang View ay ginawa nang programmatically, o pagkatapos mag-load mula sa Storyboard. Sa isang tipikal na proyekto, ang viewDidLoad ay ang pinakamadalas na i-override na paraan ng UIViewController, dahil nagbibigay ito ng ligtas na punto para sa pagtatrabaho sa mga subviews na umiiral na at handa na para sa pagsasaayos.

Isang mahalagang detalye: sa oras ng pagtawag ng viewDidLoad, ang mga sukat ng View ay hindi pa tumutugma sa mga pangwakas — hindi pa natatapos ng Auto Layout ang mga pass, at ang frame ay maaaring mag-iba mula sa inaasahan. Para sa mga kalkulasyon na nakadepende sa mga sukat, gamitin ang viewDidLayoutSubviews.

Kailan tinatawag ang viewDidLoad

Ang oras ng pagtawag ng viewDidLoad ay nakadepende sa kung paano na-initialize ang controller. Sa karamihan ng mga kaso, awtomatikong tinatawag ng UIKit ang paraang ito sa unang pag-access sa property na view ng controller — ito ay tinatawag na mekanismong lazy-loading ng UIViewController.

Sa unang pagbukas ng screen

Kapag ang NavigationController o TabBarController ay unang nagpakita ng iyong screen, sinusuri ng UIKit kung ang View ay na-load. Kung hindi — ang loadView (o pag-load mula sa Storyboard) ay tinatawag, pagkatapos nito ay agad na na-activate ang viewDidLoad. Ito ang karaniwang sitwasyon at nangyayari nang isang beses para sa bawat instance ng controller.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    print("View ay na-load — maaaring i-configure ang interface")
    setupUI()
    configureTableView()
}

Kapag bumalik sa isang umiiral na screen

Ang viewDidLoad ay hindi na tinatawag muli kapag bumalik sa screen sa pamamagitan ng back button o dismiss. Kung ang iyong lohika ay nakadepende sa muling paglitaw ng screen — ilagay ito sa viewWillAppear. Ito ay isa sa mga pinakakaraniwang konseptuwal na pagkakamali: inaasahan ng mga developer na ang viewDidLoad ay gagana sa bawat pagpapakita, ngunit tinatawag lamang ito ng UIKit nang isang beses.

Sa forcedViewLoad

Minsan pinipilit ng mga developer ang view ng controller upang simulan ang pag-load nang maaga: let _ = controller.view. Pinipilit nito ang pagtawag ng loadView at viewDidLoad bago lumitaw ang controller sa screen. Ang trick na ito ay ginagamit kapag kailangan ihanda ang View nang maaga para sa isang maayos na transisyon.

Ano ang ginagawa sa viewDidLoad

viewDidLoad ay dinisenyo para sa isang beses na mga operasyon ng pagsasaayos na hindi nakadepende sa kung ang screen ay nakikita. Ang tamang paggamit ng paraang ito ay susi sa malinis na arkitektura at mahuhulaan na pag-uugali ng controller.

Pagsasaayos ng mga UI component

Sa viewDidLoad, nirerehistro ang mga nib file at klase para sa UITableView at UICollectionView, isinaayos ang mga delegado, at itinatakda ang mga paunang halaga ng mga property ng UI element. Dahil lahat ng IBOutlet ay konektado na sa sandaling ito, maaaring ligtas na ma-access ang label.text, imageView.image at iba pang property ng subviews.

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

Pagsisimula ng data at mga subscription

Dito ginagawa ang viewModel, ini-initialize ang data source gamit ang mga array, at nagse-subscribe sa mga notification na dapat gumana sa buong buhay ng controller. Halimbawa, ang pag-subscribe sa UIApplication.willEnterForegroundNotification para sa pag-update ng data kapag bumalik mula sa background — angkop na kandidato para sa viewDidLoad. Ang ViewModel sa modernong arkitektura ng iOS ay nagsisilbing tulay sa pagitan ng controller at ng lohika ng negosyo, at ang inisyalisasyon nito mismo sa viewDidLoad ay nagsisiguro ng kahandaan ng data sa sandaling unang lumitaw ang screen.

Magbigay ng espesyal na atensyon sa pagsasaayos ng data source para sa mga talahanayan at koleksyon. Kung ang iyong talahanayan ay gumagamit ng UIFetchedResultsController o NSFetchedResultsController na may Core Data, i-initialize ang fetch request at delegado sa viewDidLoad. Ginagarantiyahan nito na sa unang paglitaw ng screen, ang talahanayan ay mapupuno na ng data nang walang karagdagang query.

Pagsasaayos ng nabigasyon

Sa viewDidLoad, isinaayos ang mga pindutan ng NavigationBar, itinatakda ang large title, idinaragdag ang search controller at itinatakda ang edit/done na mga pindutan. Ang mga elementong ito ay bihirang magbago sa paulit-ulit na pagpapakita ng screen, kaya ang inisyalisasyon nila dito ay optimal.

Ano ang hindi dapat gawin sa viewDidLoad

Hindi lahat ng operasyon ay angkop sa viewDidLoad. Ang ilang mga aksyon na inilalagay sa paraang ito ay humahantong sa labis na paggamit ng memorya, maling pag-uugali o mga bug sa paulit-ulit na pagpapakita ng screen.

Iwasan ang pagsisimula ng mga network request na ang resulta ay nakakaapekto lamang sa UI. Kung ang request ay matapos bago lumitaw ang screen, hindi makikita ng gumagamit ang resulta, at kung pagkatapos — ang data ay maaaring luma na. Simulan ang pag-load sa viewDidLoad, ngunit i-update ang UI sa viewWillAppear.

Huwag gawin sa viewDidLoad ang mga operasyon na nakadepende sa mga sukat at posisyon ng View. Sa oras ng pagtawag, hindi pa natatapos ng Auto Layout ang mga pass, at ang frame ay maaaring hindi pinal. Para sa mga kalkulasyon, gamitin ang viewDidLayoutSubviews o i-override ang updateViewConstraints.

Huwag mag-subscribe sa mga notification na aktibo lamang kapag ang screen ay nakikita. Mga notification ng keyboard, mga notification tungkol sa pagbabago ng nilalaman ng child controller — mag-subscribe sa kanila sa viewWillAppear at mag-unsubscribe sa viewDidDisappear upang maiwasan ang mga hindi kinakailangang tawag at pagtagas ng memorya.

Huwag tawagin ang mga paraan na nangangailangan ng nakikitang screen. Halimbawa, ang pagtatangkang magpakita ng UIAlertController mula sa viewDidLoad ay magdudulot ng error dahil ang View ng controller ay hindi pa naidaragdag sa hierarchy ng window. Lahat ng UI operasyon na nakadepende sa window o presentedViewController ay dapat isagawa lamang pagkatapos lumitaw ang screen.

Huwag i-initialize ang mabibigat na mapagkukunan nang hindi kinakailangan. Kung ang screen ay bihirang buksan o ang data ay hindi agad naipapakita, ipagpaliban ang paggawa ng mga resource-intensive na bagay hanggang sa talagang kailangan ang mga ito. Ang Lazy-inisyalisasyon ng mga property sa Swift ay isang built-in na mekanismo para sa paglutas ng gawaing ito: ang property na may modifier na lazy ay malilikha lamang sa unang pag-access, na nakakatipid ng memorya at nagpapabilis ng pag-load ng screen.

Huwag gamitin ang viewDidLoad para sa mga operasyon na dapat isagawa sa bawat paglitaw ng screen. Ito ang pinakapangunahing pagkakamali: ang mga baguhang developer ay madalas na naglalagay ng lohika ng pag-update ng data sa viewDidLoad at nagtataka kung bakit ang talahanayan ay hindi na-reload kapag bumalik mula sa ibang screen. Kung ang operasyon ay dapat ulitin sa bawat pagpapakita — gamitin ang viewWillAppear. Kung dapat itong isagawa nang isang beses sa buhay — viewDidLoad. Tandaan ang simpleng patakarang ito upang maiwasan ang karamihan sa mga problema sa lifecycle ng UIViewController.

Mga halimbawa ng code na may viewDidLoad

Tingnan natin ang tatlong praktikal na halimbawa na nagpapakita ng tamang paggamit ng viewDidLoad sa tunay na mga proyekto. Bawat halimbawa ay lumulutas ng isang tiyak na gawain ng pagsasaayos ng screen.

Halimbawa 1: pagsasaayos ng koleksyon na may custom na mga cell

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()
}

Halimbawa 2: programmatic na pagsasaayos ng mga constraint

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

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

Halimbawa 3: pagsasaayos ng walang laman na estado at loader

Sa viewDidLoad din isinaayos ang mga elementong ipinapakita kapag walang data: walang laman na estado, loader, placeholder. Ang mga component na ito ay ginagawa nang isang beses at ginagamit muli sa bawat paglitaw ng screen. Ang pagtatago o pagpapakita ng mga elementong ito ay kinokontrol sa viewWillAppear depende sa kasalukuyang data.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    emptyStateLabel = UILabel()
    emptyStateLabel.text = "Walang data"
    emptyStateLabel.textAlignment = .center
    emptyStateLabel.isHidden = true
    view.addSubview(emptyStateLabel)

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

Halimbawa 4: pag-subscribe sa mga notification ng application

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

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

Mga Madalas Itanong

Maaari bang tawagin nang higit sa isang beses ang viewDidLoad?

Sa normal na mga kondisyon hindi — tinatawag ng UIKit ang viewDidLoad nang isang beses pagkatapos i-load ang View sa memorya. Kung ang controller ay sirain at muling likhain, ang viewDidLoad ay gagana para sa bagong instance.

Kailangan bang tawagin ang super.viewDidLoad?

Oo, kinakailangan. Ang pagtawag ng super.viewDidLoad ay ginagarantiyahan na gagawin ng UIKit ang panloob na pagsasaayos na kinakailangan para sa tamang paggana ng Lifecycle. Palaging tawagin ang super bilang unang bagay sa loob ng paraan.

Ano ang pagkakaiba sa pagitan ng viewDidLoad at viewWillAppear?

viewDidLoad ay tinatawag nang isang beses kapag nag-load ang View. viewWillAppear ay tinatawag bawat oras bago lumitaw ang screen. Ang una — para sa isang beses na pagsasaayos, ang pangalawa — para sa pag-update ng data at estado.

Maaari bang gawin ang mabibigat na operasyon sa viewDidLoad?

Ang mabibigat na synchronous na operasyon sa viewDidLoad ay humaharang sa main thread at naantala ang paglitaw ng screen. Ang asynchronous na pag-load ay pinapayagan, ngunit kapag ina-update ang UI pagkatapos makumpleto, dapat isaalang-alang na ang screen ay maaaring nakatago na.

Paano pilitin ang pagtawag ng viewDidLoad?

Hindi direktang matawag ang viewDidLoad — ito ay tinatawag ng UIKit. Upang pilitin ang pag-load ng View, i-access ang property na controller.view. Ito ay awtomatikong magti-trigger ng loadView at viewDidLoad.

Buod

  • viewDidLoad — paraan ng isang beses na pagsasaayos ng UIViewController pagkatapos i-load ang View sa memorya
  • Tinatawag nang isang beses sa buhay ng controller sa unang pag-access sa View
  • Angkop para sa pagrehistro ng cell, pagsasaayos ng delegado, pagsisimula ng viewModel
  • Palaging tawagin ang super.viewDidLoad para sa tamang paggana ng Lifecycle
  • Huwag gamitin ang viewDidLoad para sa operasyong nakadepende sa sukat ng View
  • Para sa pag-update ng data sa bawat paglitaw gamitin ang viewWillAppear
  • Pag-subscribe sa permanenteng notification — angkop, pansamantala — sa viewWillAppear

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din