iOS میں viewDidLoad: یہ کیا ہے، مقصد اور کوڈ مثالیں

مصنف: IT Sectr اشاعت: 2026-03-05 مطالعے کا وقت: 8 منٹ

viewDidLoad پہلا طریقہ ہے جسے UIKit UIViewController کے View کو میموری میں لوڈ کرنے کے بعد کال کرتا ہے۔ Apple Developer Documentation کے مطابق، یہ طریقہ کنٹرولر کی پوری زندگی میں صرف ایک بار کال کیا جاتا ہے۔ viewDidLoad انٹرفیس کی ابتدائی ترتیب، سیل رجسٹریشن اور ڈیٹا کی ابتدا کے لیے اہم مقام ہے۔

اہم نکات

  • viewDidLoad View کے میموری میں لوڈ ہونے کے بعد ایک بار کال کیا جاتا ہے
  • super.viewDidLoad لازمی ہے — اس کے بغیر Lifecycle ٹوٹ جاتا ہے
  • اس طریقہ میں UI ترتیب دیا جاتا ہے، سیل رجسٹر کی جاتی ہیں اور data source بنایا جاتا ہے
  • اسکرین پر واپسی پر دوبارہ کال نہیں کیا جاتا — viewWillAppear استعمال کریں
  • ایک بار کی کارروائیوں اور مستقل اطلاعوں کی سبسکرائب کے لیے موزوں

viewDidLoad کیا ہے

viewDidLoad UIViewController کا ایک مثال طریقہ ہے جسے UIKit کنٹرولر کے View کے میموری میں لوڈ ہونے کے فوراً بعد کال کرتا ہے۔ اس مقام پر، تمام IBOutlet خواص پہلے ہی انٹرفیس عناصر سے جڑ چکے ہوتے ہیں، لیکن View ابھی ونڈو کے درجہ بندی میں شامل نہیں ہوا اور صارف کو نظر نہیں آتا۔ ڈویلپر اس طریقہ کو اوور رائیڈ کر کے ابتدائی اسکرین ترتیب انجام دیتا ہے۔

یہ طریقہ ViewController Lifecycle کا حصہ ہے اور اگر View پروگرامائی طور پر بنایا گیا ہو تو loadView کے فوراً بعد آتا ہے، یا Storyboard سے لوڈ کرنے کے بعد آتا ہے۔ ایک عام پروجیکٹ میں، viewDidLoad UIViewController کا سب سے زیادہ اوور رائیڈ کیا جانے والا طریقہ ہے، کیونکہ یہ موجودہ اور ترتیب کے لیے تیار ذیلی نظاروں (subviews) کے ساتھ کام کرنے کے لیے ایک محفوظ نقطہ فراہم کرتا ہے۔

ایک اہم تفصیل: جس وقت viewDidLoad کال کیا جاتا ہے، View کے ابعاد ابھی حتمی ابعاد سے مطابقت نہیں رکھتے — Auto Layout نے اپنے مراحل مکمل نہیں کیے اور فریم توقع سے مختلف ہو سکتا ہے۔ ابعاد پر منحصر حسابات کے لیے viewDidLayoutSubviews استعمال کریں۔

viewDidLoad کب کال کیا جاتا ہے

viewDidLoad کال کا وقت اس بات پر منحصر ہے کہ کنٹرولر کیسے شروع کیا گیا ہے۔ زیادہ تر معاملات میں، UIKit اس طریقہ کو خود بخود کال کرتا ہے جب پہلی بار کنٹرولر کی view خاصیت تک رسائی حاصل کی جاتی ہے — اسے UIViewController کا سست لوڈنگ (lazy-loading) طریقہ کار کہا جاتا ہے۔

اسکرین کی پہلی نمائش پر

جب NavigationController یا TabBarController پہلی بار آپ کی اسکرین دکھاتا ہے، UIKit چیک کرتا ہے کہ View لوڈ ہے یا نہیں۔ اگر نہیں — loadView کال کیا جاتا ہے (یا Storyboard سے لوڈنگ)، جس کے فوراً بعد viewDidLoad متحرک ہو جاتا ہے۔ یہ معیاری منظرنامہ ہے اور یہ ہر کنٹرولر مثال کے لیے ایک بار ہوتا ہے۔

swift
override func viewDidLoad() {
    super.viewDidLoad()
    print("View لوڈ ہو گیا — آپ انٹرفیس ترتیب دے سکتے ہیں")
    setupUI()
    configureTableView()
}

موجودہ اسکرین پر واپسی پر

واپس بٹن یا dismiss کے ذریعے اسکرین پر واپسی پر viewDidLoad دوبارہ کال نہیں کیا جاتا۔ اگر آپ کی منطق اسکرین کے دوبارہ ظاہر ہونے پر منحصر ہے — تو اسے viewWillAppear میں رکھیں۔ یہ سب سے عام تصوراتی غلطیوں میں سے ایک ہے: ڈویلپر توقع کرتے ہیں کہ viewDidLoad ہر نمائش پر چلے گا، لیکن UIKit اسے صرف ایک بار کال کرتا ہے۔

forcedViewLoad پر

بعض اوقات ڈویلپر پہلے سے لوڈنگ شروع کرنے کے لیے کنٹرولر کی view تک زبردستی رسائی حاصل کرتے ہیں: let _ = controller.view۔ یہ کنٹرولر کے اسکرین پر ظاہر ہونے سے پہلے loadView اور viewDidLoad کال کرنے پر مجبور کرتا ہے۔ یہ تکنیک اس وقت استعمال ہوتی ہے جب آپ کو ہموار منتقلی کے لیے View پہلے سے تیار کرنے کی ضرورت ہو۔

viewDidLoad میں کیا کریں

viewDidLoad ایک بار کی ترتیبی کارروائیوں کے لیے ہے جو اسکرین کے دکھائی دینے پر منحصر نہیں ہوتیں۔ اس طریقہ کا صحیح استعمال صاف ستھرے فن تعمیر اور پیش قیاسی کنٹرولر رویے کی کنجی ہے۔

UI اجزاء کی ترتیب

viewDidLoad میں، آپ UITableView اور UICollectionView کے لیے nib فائلیں اور کلاسز رجسٹر کرتے ہیں، ڈیلیگیٹ ترتیب دیتے ہیں اور UI عناصر کی خواص کی ابتدائی قیمتیں مقرر کرتے ہیں۔ چونکہ اس مقام پر تمام IBOutlet پہلے سے جڑے ہوتے ہیں، آپ محفوظ طریقے سے label.text، imageView.image اور دیگر ذیلی نظارہ خواص تک رسائی حاصل کر سکتے ہیں۔

swift
override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.delegate = self
    tableView.register(
        CustomCell.self,
        forCellReuseIdentifier: CustomCell.identifier
    )
    title = "مرکزی اسکرین"
}

ڈیٹا کی ابتدا اور سبسکرپشنز

یہاں آپ viewModel بناتے ہیں، arrays کے ساتھ data source شروع کرتے ہیں اور ان اطلاعوں کو سبسکرائب کرتے ہیں جو کنٹرولر کی پوری زندگی میں متحرک رہنی چاہئیں۔ مثال کے طور پر، پس منظر سے واپسی پر ڈیٹا اپ ڈیٹ کرنے کے لیے UIApplication.willEnterForegroundNotification کو سبسکرائب کرنا viewDidLoad کے لیے ایک اچھا امیدوار ہے۔ جدید iOS فن تعمیر میں viewModel کنٹرولر اور کاروباری منطق کے درمیان ایک پل کا کردار ادا کرتا ہے، اور اسے viewDidLoad میں شروع کرنا اس بات کو یقینی بناتا ہے کہ اسکرین کی پہلی نمائش تک ڈیٹا تیار ہو۔

ٹیبلز اور کلیکشنز کے لیے data source کی ترتیب پر خصوصی توجہ دیں۔ اگر آپ کی ٹیبل Core Data کے ساتھ UIFetchedResultsController یا NSFetchedResultsController استعمال کرتی ہے، تو fetch request اور ڈیلیگیٹ کو viewDidLoad میں شروع کریں۔ یہ اس بات کی ضمانت دیتا ہے کہ جب اسکرین پہلی بار ظاہر ہوگی، ٹیبل پہلے سے بغیر اضافی درخواستوں کے ڈیٹا سے بھری ہوگی۔

نیویگیشن ترتیب

viewDidLoad میں، آپ NavigationBar بٹن ترتیب دیتے ہیں، large title مقرر کرتے ہیں، search controller شامل کرتے ہیں اور edit/done بٹن مقرر کرتے ہیں۔ یہ عناصر اسکرین کے دوبارہ دکھائے جانے پر شاذ و نادر ہی تبدیل ہوتے ہیں، اس لیے انہیں یہاں شروع کرنا بہترین ہے۔

viewDidLoad میں کیا نہ کریں

تمام کارروائیاں viewDidLoad میں موزوں نہیں ہوتیں۔ اس طریقہ میں رکھی گئی کچھ حرکتیں ضرورت سے زیادہ میموری کی کھپت، غلط رویے یا اسکرین کے دوبارہ دکھائے جانے پر بگ کا سبب بنتی ہیں۔

سے بچیں نیٹ ورک کی درخواستیں شروع کرنا جن کا نتیجہ صرف UI کو متاثر کرتا ہے۔ اگر درخواست اسکرین کے ظاہر ہونے سے پہلے مکمل ہو جائے تو صارف نتیجہ نہیں دیکھے گا اور اگر بعد میں مکمل ہو — ڈیٹا پرانا ہو سکتا ہے۔ viewDidLoad میں لوڈنگ شروع کریں، لیکن UI کو viewWillAppear میں اپ ڈیٹ کریں۔

نہ کریں viewDidLoad میں وہ کارروائیاں جو View کے سائز اور مقام پر منحصر ہوں۔ کال کے وقت، Auto Layout نے اپنے مراحل مکمل نہیں کیے اور فریم حتمی نہیں ہو سکتا۔ حسابات کے لیے viewDidLayoutSubviews استعمال کریں یا updateViewConstraints کو اوور رائیڈ کریں۔

سبسکرائب نہ کریں ان اطلاعوں کو جو صرف اس وقت متعلقہ ہوں جب اسکرین دکھائی دے۔ کی بورڈ اطلاعیں، بچے کنٹرولرز سے مواد کی تبدیلی کی اطلاعیں — انہیں viewWillAppear میں سبسکرائب کریں اور viewDidDisappear میں ان سبسکرائب کریں تاکہ غیر ضروری کالوں اور رسیاؤں سے بچا جا سکے۔

کال نہ کریں وہ طریقے جن کے لیے دکھائی دینے والی اسکرین کی ضرورت ہو۔ مثال کے طور پر، viewDidLoad سے UIAlertController دکھانے کی کوشش غلطی کا سبب بنے گی کیونکہ کنٹرولر کا View ابھی ونڈو کے درجہ بندی میں شامل نہیں ہوا۔ کوئی بھی UI کارروائیاں جو ونڈو یا presentedViewController پر منحصر ہوں، اسکرین کے ظاہر ہونے کے بعد ہی انجام دی جانی چاہئیں۔

شروع نہ کریں غیر ضروری طور پر بھاری وسائل۔ اگر اسکرین شاذ و نادر ہی دکھائی جاتی ہے یا ڈیٹا فوری طور پر ظاہر نہیں ہوتا، تو وسائل گہری اشیاء کی تخلیق کو اس وقت تک مؤخر کریں جب تک واقعی ضرورت نہ ہو۔ Swift میں سست خصوصیت کی ابتدا (lazy initialization) اس مسئلے کو حل کرنے کے لیے ایک بلٹ ان میکانزم ہے: lazy modifier والی خصوصیت صرف پہلی رسائی پر بنائی جائے گی، میموری بچائے گی اور اسکرین لوڈنگ کو تیز کرے گی۔

استعمال نہ کریں viewDidLoad کو ان کارروائیوں کے لیے جو ہر بار اسکرین ظاہر ہونے پر انجام دی جانی چاہئیں۔ یہ سب سے بنیادی غلطی ہے: ابتدائی ڈویلپر اکثر ڈیٹا اپ ڈیٹ منطق کو viewDidLoad میں رکھتے ہیں اور حیران ہوتے ہیں کہ دوسری اسکرین سے واپسی پر ٹیبل دوبارہ لوڈ نہیں ہوتی۔ اگر کوئی کارروائی ہر نمائش پر دہرائی جانی چاہیے — viewWillAppear استعمال کریں۔ اگر زندگی میں ایک بار انجام دی جانی چاہیے — viewDidLoad استعمال کریں۔ UIViewController کی زندگی کے دورانیے کے ساتھ زیادہ تر مسائل سے بچنے کے لیے اس سادہ اصول کو یاد رکھیں۔

viewDidLoad کے ساتھ کوڈ مثالیں

آئیے تین عملی مثالیں دیکھتے ہیں جو حقیقی پروجیکٹس میں viewDidLoad کے صحیح استعمال کو ظاہر کرتی ہیں۔ ہر مثال ایک مخصوص اسکرین ترتیب کے کام کو حل کرتی ہے۔

مثال 1: حسب ضرورت سیل کے ساتھ کلیکشن ترتیب دینا

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

مثال 2: پروگرامائی طور پر رکاوٹیں مقرر کرنا

swift
override func viewDidLoad() {
    super.viewDidLoad()
    let label = UILabel()
    label.text = "ہیلو، دنیا!"
    label.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(label)

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

مثال 3: خالی حالت اور لوڈر ترتیب دینا

viewDidLoad میں، آپ ڈیٹا نہ ہونے پر دکھائے جانے والے عناصر بھی ترتیب دیتے ہیں: خالی حالت، لوڈر، پلیس ہولڈر۔ یہ اجزاء ایک بار بنائے جاتے ہیں اور اسکرین کے ظاہر ہونے پر ہر بار دوبارہ استعمال ہوتے ہیں۔ ان عناصر کو چھپانا یا دکھانا موجودہ ڈیٹا کے مطابق viewWillAppear میں منظم کیا جاتا ہے۔

swift
override func viewDidLoad() {
    super.viewDidLoad()
    emptyStateLabel = UILabel()
    emptyStateLabel.text = "کوئی ڈیٹا نہیں"
    emptyStateLabel.textAlignment = .center
    emptyStateLabel.isHidden = true
    view.addSubview(emptyStateLabel)

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

مثال 4: ایپلیکیشن اطلاعوں کو سبسکرائب کرنا

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

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

اکثر پوچھے گئے سوالات

کیا viewDidLoad ایک سے زیادہ بار کال کیا جا سکتا ہے؟

عام حالات میں، نہیں — UIKit View کو میموری میں لوڈ کرنے کے بعد viewDidLoad کو ایک بار کال کرتا ہے۔ اگر کنٹرولر ختم ہو جائے اور دوبارہ بنایا جائے تو viewDidLoad نئی مثال کے لیے چلے گا۔

کیا مجھے super.viewDidLoad کال کرنے کی ضرورت ہے؟

ہاں، یقیناً۔ super.viewDidLoad کال کرنا یقینی بناتا ہے کہ UIKit Lifecycle کے صحیح کام کرنے کے لیے ضروری داخلہ ترتیب انجام دے۔ طریقہ کے اندر ہمیشہ پہلے super کال کریں۔

viewDidLoad اور viewWillAppear میں کیا فرق ہے؟

viewDidLoad View لوڈ ہونے پر ایک بار کال کیا جاتا ہے۔ viewWillAppear اسکرین کے ظاہر ہونے سے پہلے ہر بار کال کیا جاتا ہے۔ پہلا ایک بار کی ترتیب کے لیے، دوسرا ڈیٹا اور حالت کو اپ ڈیٹ کرنے کے لیے۔

کیا میں viewDidLoad میں بھاری کارروائیاں کر سکتا ہوں؟

viewDidLoad میں بھاری مطابقت پذیر کارروائیاں مرکزی دھاگے کو روکتی ہیں اور اسکرین کے ظاہر ہونے میں تاخیر کرتی ہیں۔ غیر مطابقت پذیر لوڈنگ قابل قبول ہے، لیکن تکمیل پر UI کو اپ ڈیٹ کرتے وقت اس امکان کو مدنظر رکھنا چاہیے کہ اسکرین پہلے سے چھپی ہو سکتی ہے۔

viewDidLoad کو زبردستی کیسے کال کریں؟

آپ براہ راست viewDidLoad کال نہیں کر سکتے — UIKit اسے کال کرتا ہے۔ View لوڈ کرنے پر مجبور کرنے کے لیے، controller.view خاصیت تک رسائی حاصل کریں۔ یہ خود بخود loadView اور viewDidLoad کو متحرک کرے گا۔

خلاصہ

  • viewDidLoad View کے میموری میں لوڈ ہونے کے بعد کال کیا جانے والا ایک بار کا UIViewController ترتیب کا طریقہ ہے
  • View تک پہلی رسائی پر کنٹرولر کی زندگی میں ایک بار کال کیا جاتا ہے
  • سیل رجسٹریشن، ڈیلیگیٹ ترتیب، viewModel ابتدا کے لیے موزوں
  • درست Lifecycle آپریشن کے لیے ہمیشہ super.viewDidLoad کال کریں
  • View کے ابعاد پر منحصر کارروائیوں کے لیے viewDidLoad استعمال نہ کریں
  • ہر نمائش پر ڈیٹا اپ ڈیٹ کرنے کے لیے viewWillAppear استعمال کریں
  • مستقل اطلاعوں کو سبسکرائب کرنا مناسب ہے، عارضی کو — viewWillAppear میں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں