ViewController — iOS में स्क्रीन कंट्रोलर का सार और इसका Lifecycle

लेखक: IT Sectr प्रकाशित: 2026-02-22 पढ़ने का समय: 7 मिनट

UIViewController iOS अनुप्रयोगों का केंद्रीय वर्ग है, जो स्क्रीन और उसकी सामग्री का प्रबंधन करता है। प्रत्येक iPhone या iPad स्क्रीन एक ViewController द्वारा प्रबंधित होती है, जो प्रदर्शन, जीवनचक्र और नेविगेशन का समन्वय करता है। UIKit आर्किटेक्चर के बारे में और अधिक पढ़ें Apple के आधिकारिक दस्तावेज़ में

मुख्य बिंदु

  • UIViewController — UIKit में अपने स्वयं के जीवनचक्र के साथ स्क्रीन प्रबंधित करने के लिए आधार वर्ग
  • viewDidLoad — एक बार कॉल होता है, UI आरंभीकरण और डेटा सदस्यता का बिंदु
  • viewWillAppear — स्क्रीन जल्द ही दिखाई देगी, प्रदर्शन से पहले डेटा अद्यतन
  • Lifecycle में पाँच विधियाँ शामिल हैं: viewDidLoad, viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear
  • Massive View Controller — iOS का मुख्य एंटी-पैटर्न, MVVM या Coordinator के माध्यम से हल किया जाता है

ViewController क्या है?

UIViewController UIKit फ्रेमवर्क का एक वर्ग है जो UIView के पदानुक्रम का प्रबंधन करता है और स्क्रीन पर डेटा प्रदर्शन का समन्वय करता है। प्रत्येक iOS एप्लिकेशन में कम से कम एक ViewController होता है — विंडो का मूल नियंत्रक। नियंत्रक स्क्रीन घुमाव, स्क्रीन के बीच संक्रमण और जीवनचक्र घटनाओं को संभालता है।

iOS में MVC (Model-View-Controller) आर्किटेक्चर UIViewController के माध्यम से ही कार्यान्वित किया जाता है: नियंत्रक मॉडल से डेटा प्राप्त करता है और दृश्य को अद्यतन करता है। ViewController एक दृश्य तत्व नहीं है — यह view प्रॉपर्टी का प्रबंधन करता है जिसमें subview का पदानुक्रम होता है। Apple (2026) के अनुसार, UIKit में 40 से अधिक अंतर्निहित UIViewController उपवर्ग हैं।

पहले iPhone SDK (2008) में तीन जीवनचक्र विधियों के साथ UIViewController शामिल था। 18 वर्षों में, Apple ने Container View Controller, अनुकूली प्रस्तुतियाँ, कस्टम एनिमेशन के लिए UIViewControllerTransitioningDelegate और iPad पर विभाजित स्क्रीन मोड के लिए समर्थन जोड़ा। UIViewController UIKit अनुप्रयोगों के लिए एक अनिवार्य घटक बना हुआ है।

UIViewController का जीवनचक्र

UIViewController का जीवनचक्र — स्क्रीन बनाने, प्रदर्शित करने और छिपाने पर सिस्टम द्वारा कॉल की जाने वाली विधियों का एक क्रम है। Lifecycle को समझना अत्यंत महत्वपूर्ण है: कोड का गलत स्थान मेमोरी लीक, अनावश्यक नेटवर्क अनुरोध और इंटरफ़ेस झिलमिलाहट का कारण बनता है।

विधिकॉल का क्षणउद्देश्य
viewDidLoadएक बार, view के मेमोरी में लोड होने के बादप्रारंभिक UI सेटअप, Combine सदस्यता
viewWillAppearस्क्रीन प्रकट होने से पहलेडेटा अद्यतन, नेविगेशन बार छिपाना/दिखाना
viewDidAppearस्क्रीन प्रकट होने के बादएनिमेशन शुरू करना, विश्लेषण, कैमरा अद्यतन
viewWillDisappearस्क्रीन से जाने से पहलेड्राफ्ट सहेजना, सूचनाओं से सदस्यता समाप्त करना
viewDidDisappearस्क्रीन से जाने के बादभारी प्रक्रियाओं को रोकना, संसाधन मुक्त करना

स्क्रीन प्रकट होने पर कॉल क्रम

स्क्रीन के पहली बार प्रदर्शित होने पर क्रम: init → loadView → viewDidLoad → viewWillAppear → viewDidAppear। पुनः प्रकट होने पर (दूसरी स्क्रीन से वापसी): viewWillAppear → viewDidAppear। viewDidLoad नियंत्रक के जीवनकाल में केवल एक बार कॉल होता है।

viewDidLoad, init और UI सेटअप

viewDidLoad विधि उपयोगकर्ता इंटरफ़ेस को कॉन्फ़िगर करने का मुख्य बिंदु है। यह view के मेमोरी में लोड होने के बाद कॉल होती है, जब सभी IBOutlet कनेक्शन पहले से स्थापित हो चुके होते हैं। यहाँ UI तत्व प्रोग्रामेटिक रूप से बनाए जाते हैं, constraints कॉन्फ़िगर किए जाते हैं, और प्रारंभिक डेटा लोड किया जाता है।

swift
final class ProfileViewController: UIViewController {

    private let tableView = UITableView()
    private let viewModel = ProfileViewModel()

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
        bindViewModel()
    }

    private func setupUI() {
        view.addSubview(tableView)
        tableView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
            tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])
        tableView.register(ProfileCell.self,
                         forCellReuseIdentifier: ProfileCell.reuseId)
    }

    private func bindViewModel() {
        viewModel.$user
            .receive(on: DispatchQueue.main)
            .sink { [weak self] user in
                self?.title = user.name
            }
            .store(in: &cancellables)
    }
}

SwiftUI में, यह कोड View के body के बराबर है। लेकिन UIViewController जीवनचक्र और अनुकूलन पर पूर्ण नियंत्रण देता है। bindViewModel प्रतिक्रियाशील सदस्यता के लिए Combine का उपयोग करता है — मॉडल बदलने पर डेटा स्वचालित रूप से अद्यतन होता है।

viewWillAppear और डेटा अद्यतन

viewWillAppear स्क्रीन प्रकट होने से पहले हर बार कॉल होता है, भले ही वह पहले से मेमोरी में हो। यह उन डेटा को अद्यतन करने का स्थान है जो किसी अन्य स्क्रीन पर बदल सकते हैं: सूची को पुनः लोड करना, सूचना बैज को अद्यतन करना, विशिष्ट स्क्रीन के लिए नेविगेशन बार कॉन्फ़िगर करना।

swift
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // इस स्क्रीन पर नेविगेशन बार छिपाएँ
    navigationController?.setNavigationBarHidden(true, animated: animated)

    // दूसरी स्क्रीन से वापस आने पर डेटा अपडेट करें
    tableView.reloadData()
    badgeLabel.text = "\(CartManager.shared.itemCount)"
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // विश्लेषण: केवल उपयोगकर्ता द्वारा स्क्रीन देखने के बाद
    AnalyticsService.shared.logScreenView("Profile")
}

viewDidLoad और viewWillAppear के बीच अंतर महत्वपूर्ण है: viewDidLoad एक बार निष्पादित होता है और स्थिर सेटअप के लिए उपयुक्त है, viewWillAppear हर बार स्क्रीन प्रदर्शित होने पर निष्पादित होता है और गतिशील अद्यतन के लिए उपयुक्त है। viewDidLoad में नेटवर्क अनुरोध रखने से स्क्रीन पर वापस आने पर पुराना डेटा दिखाई देगा।

Container View Controller: UINavigationController और UITabBarController

Container View Controller एक ViewController है जो एक या अधिक चाइल्ड ViewController का प्रबंधन करता है। Apple तीन अंतर्निहित कंटेनर प्रदान करता है: UINavigationController (स्क्रीन स्टैक), UITabBarController (टैब), और UISplitViewController (iPad के लिए मास्टर-डिटेल)।

UINavigationController स्टैक में संक्रमण व्यवस्थित करता है — push स्क्रीन जोड़ता है, pop हटाता है। UITabBarController एप्लिकेशन के स्वतंत्र अनुभागों के बीच स्विच करता है। UISplitViewController iPad पर दो नियंत्रकों को साथ-साथ और iPhone पर एक दिखाता है। डेवलपर addChild के माध्यम से कस्टम कंटेनर बना सकता है।

swift
// कस्टम Container View Controller
final class ContainerViewController: UIViewController {

    private let sidebarVC = SidebarViewController()
    private let contentVC = ContentViewController()

    override func viewDidLoad() {
        super.viewDidLoad()

        // चाइल्ड कंट्रोलर जोड़ना
        addChild(sidebarVC)
        view.addSubview(sidebarVC.view)
        sidebarVC.didMove(toParent: self)

        addChild(contentVC)
        view.addSubview(contentVC.view)
        contentVC.didMove(toParent: self)
    }
}

Container View Controller के साथ सही कार्य के लिए इस क्रम में addChild, view जोड़ना और didMove(toParent:) कॉल करना आवश्यक है। हटाते समय: willMove(toParent: nil), removeFromSuperview, removeFromParent। क्रम का उल्लंघन मेमोरी लीक का कारण बनता है।

MVVM और Coordinator के माध्यम से Massive View Controller को हल करना

Massive View Controller समस्या तब होती है जब UIViewController में व्यावसायिक तर्क, नेटवर्क अनुरोध, नेविगेशन और UI कोड के सैकड़ों पंक्तियाँ होती हैं। Apple समस्या को स्वीकार करता है और नेविगेशन निकालने के लिए Coordinator के साथ MVVM (Model-View-ViewModel) की सिफारिश करता है।

MVVM व्यावसायिक तर्क को नियंत्रक से ViewModel में स्थानांतरित करता है। Controller केवल ViewModel को Combine या डेलिगेट के माध्यम से View से जोड़ता है। Coordinator नेविगेशन तर्क — नियंत्रकों के बीच निर्माण और संक्रमण — को एक अलग वर्ग में निकालता है। यह दृष्टिकोण 2024 से Apple की सर्वोत्तम प्रथाओं में शामिल किया गया है।

swift
// Coordinator — नेविगेशन प्रबंधन
protocol Coordinator {
    var childCoordinators: [Coordinator] { get set }
    func start()
}

final class MainCoordinator: Coordinator {

    var childCoordinators = [Coordinator]()
    private let navigationController: UINavigationController

    init(navigationController: UINavigationController) {
        self.navigationController = navigationController
    }

    func start() {
        let vc = ListViewController()
        vc.didSelectItem = { [weak self] item in
            self?.showDetail(item)
        }
        navigationController.pushViewController(vc, animated: false)
    }

    private func showDetail(_ item: Item) {
        let vc = DetailViewController(item: item)
        navigationController.pushViewController(vc, animated: true)
    }
}

UIViewController बनाम SwiftUI: कब क्या चुनें

UIViewController और SwiftUI View के बीच चुनाव परियोजना के आरंभ वर्ष, अनुकूलन आवश्यकताओं और न्यूनतम समर्थित iOS संस्करण पर निर्भर करता है। UIKit UIViewController के साथ 2020 से पहले शुरू की गई परियोजनाओं और गहन इंटरफ़ेस अनुकूलन वाले अनुप्रयोगों के लिए आधार बना हुआ है।

SwiftUI iOS 17+ वाली नई परियोजनाओं, मानक इंटरफ़ेस और प्रोटोटाइप के लिए उपयुक्त है। हालाँकि, कस्टम संक्रमण, कैमरा कार्य, MapKit, जटिल CALayer एनिमेशन के लिए UIViewController आवश्यक है। Apple UIHostingController (UIKit के अंदर SwiftUI) और UIViewRepresentable (SwiftUI के अंदर UIKit) के माध्यम से दृष्टिकोणों को संयोजित करने की सिफारिश करता है।

परिदृश्यUIKit (UIViewController)SwiftUI (View)
कस्टम एनिमेशनUIViewPropertyAnimator के माध्यम से पूर्ण नियंत्रणAnimation के माध्यम से सीमित
कैमरा कार्यAVCaptureSession + UIViewPreviewUIViewControllerRepresentable के माध्यम से
CollectionViewUICollectionView + UICollectionViewLayoutLazyVGrid/LazyHGrid
iPad अनुकूलनUISplitViewController + UITraitCollectionNavigationSplitView + sizeClass
विकास गतिधीमी (मैन्युअल लेआउट)तेज़ (घोषणात्मक)

अक्सर पूछे जाने वाले प्रश्न

UIViewController, UIView से कैसे भिन्न है?

UIViewController एक नियंत्रक है जो स्क्रीन और उसके जीवनचक्र का प्रबंधन करता है। UIView एक दृश्य है जो सामग्री प्रदर्शित करता है। ViewController में UIViews का पदानुक्रम होता है लेकिन वह स्वयं एक दृश्य तत्व नहीं है। एक नियंत्रक कई दृश्यों का प्रबंधन करता है।

Massive View Controller क्या है?

Massive View Controller एक एंटी-पैटर्न है जहाँ UIViewController में बहुत अधिक तर्क होता है: डेटा, नेविगेशन, नेटवर्क अनुरोध, एनिमेशन। समाधान — कोड को अलग सेवाओं, कोऑर्डिनेटर और ViewModel (MVVM) में निकालना है।

ViewControllers के बीच डेटा कैसे स्थानांतरित करें?

चार तरीके: prepare(for:sender:) (Segue) में प्रॉपर्टी के माध्यम से, डेलिगेट (Delegate) के माध्यम से, क्लोज़र (Closure) के माध्यम से, साझा सेवा के माध्यम से। ढीले युग्मन के लिए, Coordinator + Delegate या Combine का उपयोग करें।

Container View Controller क्या है?

Container View Controller एक नियंत्रक है जो चाइल्ड ViewController का प्रबंधन करता है। उदाहरण: UINavigationController, UITabBarController, UISplitViewController। मूल नियंत्रक addChild के माध्यम से बच्चों को जोड़ता है, उनके बीच स्विच करता है और उनके लेआउट का प्रबंधन करता है।

SwiftUI View के बजाय UIViewController का उपयोग कब करें?

UIViewController — जटिल कस्टम एनिमेशन, कैमरा कार्य, मानचित्र, वीडियो, कस्टम लेआउट वाले UICollectionView के लिए। SwiftUI View — iOS 13+ पर मानक इंटरफ़ेस के लिए। UIHostingController के माध्यम से संयोजन स्वीकार्य है।

सारांश

  • UIViewController — स्क्रीन, UIView पदानुक्रम और जीवनचक्र के प्रबंधन के लिए केंद्रीय UIKit वर्ग
  • Lifecycle में पाँच विधियाँ शामिल हैं: viewDidLoad, viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear
  • viewDidLoad — प्रारंभिक UI सेटअप का बिंदु, नियंत्रक के जीवनकाल में एक बार कॉल होता है
  • viewWillAppear — प्रदर्शन से पहले हर बार कॉल होता है, डेटा अद्यतन और नेविगेशन बार कॉन्फ़िगरेशन के लिए उपयुक्त
  • Container View Controller (UINavigationController, UITabBarController) चाइल्ड नियंत्रकों के पदानुक्रम का प्रबंधन करता है
  • Massive View Controller MVVM (ViewModel में तर्क निकालना) और Coordinator (नेविगेशन निकालना) के माध्यम से हल किया जाता है
  • UIViewController और SwiftUI को हाइब्रिड अनुप्रयोगों के लिए UIHostingController और UIViewRepresentable के माध्यम से जोड़ा जा सकता है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें