ViewController Lifecycle di iOS: konsep kunci, tahapan dan metode

Penulis: IT Sectr Diterbitkan: 2026-03-05 Waktu membaca: 9 mnt

ViewController Lifecycle — adalah urutan metode yang UIKit panggil secara otomatis saat mengelola layar di iOS. Menurut Apple Documentation, setiap UIViewController melewati serangkaian status yang dapat diprediksi: dari pembuatan View hingga kemunculan dan penyembunyiannya. Memahami urutan dan tujuan metode ini adalah syarat penting untuk aplikasi iOS yang stabil.

Poin Utama

  • ViewController Lifecycle — adalah enam metode UIViewController yang dipanggil UIKit dalam urutan ketat
  • loadView membuat hierarki View jika Anda tidak menggunakan Storyboard
  • viewDidLoad dipanggil sekali dan cocok untuk pengaturan awal layar
  • viewWillAppear dan viewDidAppear dipicu setiap kali muncul
  • viewWillDisappear dan viewDidDisappear — untuk menyimpan status dan pembersihan

Apa itu ViewController Lifecycle

ViewController Lifecycle — adalah kumpulan metode yang diterima UIViewController dari UIKit selama keberadaannya. Setiap layar dalam aplikasi iOS secara berurutan melalui tahap pembuatan, pemuatan View, kemunculan di layar, penghilangan, dan pembebasan memori. UIKit secara otomatis memanggil metode yang sesuai pada setiap tahap, dan pengembang menimpanya dengan menambahkan logika sendiri.

Arsitektur UIViewController menjadi dasar UIKit dan tetap relevan bahkan di era SwiftUI — banyak proyek masih menggunakan pendekatan klasik atau arsitektur hibrida. Memahami Lifecycle memungkinkan Anda memprediksi kapan subviews tersedia, kapan layout dapat diubah dengan aman, dan operasi apa yang harus dilakukan saat layar muncul atau disembunyikan.

Setiap metode siklus hidup memiliki tujuan spesifik: beberapa dipanggil sekali selama keberadaan kontroler, yang lain — setiap kali muncul atau menghilang. Mencampur logika antar metode menyebabkan bug yang sulit ditemukan: kebocoran memori, pembaruan data yang salah, dan permintaan jaringan yang tidak perlu.

Siklus lengkap metode UIViewController

Enam metode membentuk siklus hidup lengkap UIViewController. Urutan pemanggilannya tetap dan tidak tergantung pada metode navigasi — push, present, atau unwind segue mengikuti jadwal yang sama.

loadView — pembuatan View akar

loadView — metode pertama siklus, dipanggil ketika View kontroler belum ada. Jika Anda menggunakan Storyboard, UIKit secara otomatis memuat View dari file xib. Saat membuat antarmuka secara terprogram, Anda menimpa metode ini, menetapkan View akar secara manual. Di sebagian besar proyek, loadView tidak disentuh — pekerjaan dilakukan di viewDidLoad.

Menimpa loadView hanya diperlukan dalam kasus spesifik: ketika seluruh antarmuka dibuat dengan kode tanpa Storyboard atau ketika View akar harus dari kelas non-standar. Apple merekomendasikan untuk tidak memanggil super.loadView saat menimpa — Anda sepenuhnya mengambil alih pembuatan View.

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

viewDidLoad — inisialisasi satu kali

viewDidLoad — metode yang paling sering digunakan dalam siklus. Dipanggil sekali setelah View dimuat ke memori, tetapi belum ditampilkan di layar. Di sini subviews dikonfigurasi, tabel diisi dengan data, sel didaftarkan, dan notifikasi yang berlaku selama masa hidup kontroler dilanggani.

Fitur penting: viewDidLoad tidak dipanggil ulang saat layar ditampilkan kembali. Jika Anda perlu memperbarui data setiap kali muncul — gunakan viewWillAppear. Di viewDidLoad, tempatkan hanya operasi satu kali yang menjadi dasar konfigurasi.

viewWillAppear — persiapan sebelum ditampilkan

viewWillAppear dipanggil setiap kali tepat sebelum View menjadi terlihat oleh pengguna. Metode ini menerima parameter animated, yang menunjukkan apakah kemunculan disertai animasi. Di sini data diperbarui, tabel dimuat ulang, NavigationBar dikonfigurasi, dan elemen disembunyikan atau ditampilkan tergantung status aplikasi.

Gunakan viewWillAppear untuk sinkronisasi status antar layar: jika pengguna mungkin telah mengubah data di layar sebelumnya, metode ini adalah tempat yang tepat untuk memperbarui antarmuka. Setiap pemanggilan viewWillAppear mendahului kemunculan layar, bahkan saat kembali dari kontroler anak.

viewDidAppear — layar sepenuhnya terlihat

viewDidAppear memberi tahu bahwa View telah sepenuhnya muncul di layar dan semua animasi transisi selesai. Pada saat ini, layar siap untuk interaksi — pengguna melihat antarmuka lengkap dan dapat bekerja dengannya. Metode ini cocok untuk memulai animasi yang harus dimulai setelah kemunculan, memulai timer, dan melacak tampilan analitik.

Tidak seperti viewWillAppear, viewDidAppear menjamin bahwa layar tidak hanya terlihat tetapi juga sepenuhnya dirender. Jika Anda memulai animasi di viewWillAppear, beberapa frame mungkin terlewat karena UIKit belum menyelesaikan transisi. Untuk animasi yang halus, gunakan viewDidAppear.

viewWillDisappear — persiapan untuk disembunyikan

viewWillDisappear dipanggil sebelum View menghilang dari layar — saat beralih ke kontroler lain, menutup jendela modal, atau meminimalkan aplikasi. Ini adalah tempat yang tepat untuk menyimpan status, berhenti berlangganan notifikasi, menghentikan proses aktif, dan membebaskan sumber daya yang tidak diperlukan saat layar tidak terlihat.

Penting untuk diingat: viewWillDisappear tidak menjamin bahwa View akan benar-benar menghilang — gerakan dapat dibatalkan. Oleh karena itu, simpan data kritis juga di viewDidDisappear, yang dipanggil hanya setelah penghilangan sebenarnya.

viewDidDisappear — layar disembunyikan

viewDidDisappear mengakhiri siklus kemunculan dan penghilangan. Dipanggil setelah View telah disembunyikan dari layar. Dalam metode ini, animasi dihentikan sepenuhnya, objek sementara dihapus, dan penyimpanan data yang dimulai di viewWillDisappear dikonfirmasi.

Metode ini juga mendahului deinit kontroler — jika UIViewController Anda dihancurkan, viewDidDisappear akan menjadi metode Lifecycle terakhir sebelum pemanggilan deinit. Gunakan untuk pembersihan akhir yang harus terjadi sebelum objek dihancurkan.

Kapan setiap metode dipanggil

Urutan pemanggilan tergantung pada bagaimana layar muncul: pertama kali, saat kembali, atau saat tampilan modal. Mari kita lihat tiga skenario utama dari perspektif UIKit.

Urutan saat pertama kali dibuka

Pada kemunculan pertama layar, UIKit melalui siklus pembuatan lengkap: loadView dipanggil, kemudian viewDidLoad, setelah itu animasi kemunculan dimulai. Selama animasi, viewWillAppear dipanggil, dan setelah selesai — viewDidAppear. Ini adalah satu-satunya skenario di mana semua metode dari loadView hingga viewDidAppear dipanggil secara berurutan.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    print("viewDidLoad — View dimuat ke memori")
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    print("viewWillAppear — akan segera muncul")
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    print("viewDidAppear — layar sepenuhnya terlihat")
}

Urutan saat kembali

Ketika pengguna kembali ke layar sebelumnya, UIKit tidak memanggil ulang viewDidLoad — View sudah dimuat ke memori. Sebaliknya, di layar yang kembali hanya viewWillAppear dan viewDidAppear yang dipicu, dan di layar saat ini — viewWillDisappear dan viewDidDisappear. loadView dan viewDidLoad dilewati karena layar sudah ada di tumpukan navigasi.

Kekhasan saat present dan dismiss

Tampilan modal mengikuti aturan yang sama: pada kontroler baru, siklus lengkap dipanggil saat kemunculan pertama, dan pada kontroler saat ini — viewWillDisappear dan viewDidDisappear. Saat dismiss, urutannya terbalik: pada kontroler yang kembali, viewWillAppear dan viewDidAppear dipicu lagi, dan pada kontroler yang disembunyikan — metode akhir. Perilaku ini seragam untuk semua jenis transisi di UIKit.

Skenario penggunaan praktis

Mari kita lihat empat skenario utama di mana pemahaman Lifecycle secara langsung memengaruhi kualitas kode dan pengalaman pengguna. Untuk setiap skenario, kami memberikan contoh dengan rekomendasi.

Inisialisasi data di viewDidLoad

viewDidLoad — tempat untuk konfigurasi awal yang tidak tergantung pada visibilitas layar. Di sini collectionView dikonfigurasi, file nib untuk sel didaftarkan, data source dan layout dibuat. Jika Anda memuat data dari jaringan, di viewDidLoad sebaiknya hanya memulai permintaan, dan memperbarui antarmuka di viewWillAppear saat layar siap ditampilkan.

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

Memperbarui konten di viewWillAppear

Gunakan viewWillAppear untuk menyinkronkan data setiap kali layar muncul. Misalnya, jika pengguna mungkin telah mengubah pengaturan di layar sebelumnya, di sini nilai yang ditampilkan diperbarui, tabel dimuat ulang, dan status NavigationBar diperbaiki. Ini memastikan bahwa layar selalu menampilkan data terkini dalam skenario navigasi apa pun.

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

Analitik dan animasi di viewDidAppear

viewDidAppear sangat ideal untuk memulai animasi yang harus dimulai setelah pengguna melihat layar. Di sini juga peristiwa analitik dikirim: tampilan layar, mulai onboarding, atau mulai pemutaran video. Memulai animasi sebelum transisi selesai menghasilkan antarmuka yang tersendat — UIKit tidak sempat menyiapkan frame yang cukup.

Menyimpan status di viewWillDisappear

Di viewWillDisappear, draf disimpan, timer dihentikan, dan langganan NotificationCenter dibatalkan. Ini adalah momen terakhir saat layar masih terlihat dan tersedia untuk operasi yang memerlukan konteks pengguna. Untuk data kritis, tambahan viewDidDisappear digunakan sebagai perlindungan terhadap gerakan yang dibatalkan.

Kesalahan umum saat bekerja dengan Lifecycle

Penggunaan yang salah dari metode siklus hidup adalah salah satu sumber bug paling umum di aplikasi iOS. Mari kita lihat kesalahan utama yang dilakukan pengembang pada berbagai tahap bekerja dengan UIViewController.

Kesalahan pertama — membuat subviews di init atau loadView saat menggunakan Storyboard. Jika Anda menggunakan Interface Builder, jangan timpa loadView tanpa perlu. Membuat View di loadView dengan storyboard yang ada menyebabkan file xib diabaikan dan layar kosong.

Kesalahan kedua — berlangganan notifikasi keyboard di viewDidLoad tanpa berhenti berlangganan. Jika Anda berlangganan UIResponder.keyboardWillShowNotification tetapi tidak berhenti berlangganan saat layar disembunyikan, blok akan dipanggil bahkan setelah deinit kontroler — ini adalah kebocoran memori dengan potensi crash aplikasi.

Kesalahan ketiga — timer dan permintaan jaringan yang dimulai sebelum layar muncul. Memuat gambar atau menjalankan animasi ketika View belum terlihat — pemborosan sumber daya. Pindahkan pembaruan visual ke viewWillAppear atau viewDidAppear.

Kesalahan keempat — menyimpan data hanya di viewWillDisappear. Pada gerakan pop interaktif, pengguna dapat memulai gesekan dan membatalkannya — metode dipanggil, tetapi layar tidak menghilang. Duplikasi penyimpanan kritis di viewDidDisappear atau di handler applicationDidEnterBackground.

Pertanyaan yang Sering Diajukan

Berapa kali viewDidLoad dipanggil selama masa hidup kontroler?

Sekali — setelah View dimuat ke memori. Saat layar muncul kembali, viewDidLoad tidak dipanggil. Jika perlu membuat ulang View, kontroler harus dihancurkan dan dibuat ulang.

Apa yang terjadi jika super tidak dipanggil di viewDidLoad?

UIKit memerlukan pemanggilan super.viewDidLoad untuk berfungsinya siklus hidup dengan benar. Tanpanya, masalah dengan pembaruan layout dan pemrosesan transisi dapat terjadi. Selalu panggil super sebagai perintah pertama dalam metode.

Bisakah Storyboard dan loadView terprogram digunakan bersamaan?

Tidak disarankan. Jika kontroler diinisialisasi dari Storyboard, UIKit secara otomatis memuat View dari xib. Menimpa loadView membatalkan proses ini dan storyboard Anda akan diabaikan.

Bagaimana cara berhenti berlangganan dari NotificationCenter dengan benar?

Berlanggananlah di viewDidLoad atau viewWillAppear, dan berhenti berlangganan di viewWillDisappear atau viewDidDisappear, menggunakan referensi lemah ke self untuk menghindari kebocoran memori di closure.

Mengapa viewDidDisappear tidak dipanggil saat force quit?

Force quit mematikan proses secara paksa — UIKit tidak sempat memanggil metode Lifecycle. Untuk menyimpan data, gunakan notifikasi UIApplication.willTerminateNotification di AppDelegate.

Ringkasan

  • ViewController Lifecycle terdiri dari enam metode yang dipanggil UIKit dalam urutan tetap
  • loadView dan viewDidLoad dipicu sekali saat pembuatan kontroler
  • viewWillAppear dan viewDidAppear dipanggil setiap kali layar muncul
  • viewWillDisappear dan viewDidDisappear — setiap kali disembunyikan
  • Setiap metode memiliki tujuan spesifik — mencampur logika menyebabkan bug
  • Langganan notifikasi selalu diimbangi dengan berhenti berlangganan di metode yang sesuai
  • Gunakan viewDidAppear untuk animasi dan analitik, dan viewWillDisappear untuk menyimpan status

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga