iOS-da ViewController Lifecycle: əsas anlayışlar, mərhələlər və metodlar

Müəllif: IT Sectr Dərc olunub: 2026-03-05 Oxuma vaxtı: 9 dəq

ViewController Lifecycle — iOS-da UIKit tərəfindən ekranların idarə edilməsi zamanı avtomatik çağırılan metodlar ardıcıllığıdır. Apple Documentation-a görə, hər bir UIViewController proqnozlaşdırıla bilən vəziyyətlər dəstindən keçir: View-in yaradılmasından onun görünməsi və gizlənməsinə qədər. Bu metodların sırasını və məqsədini anlamaq iOS tətbiqinin sabit işləməsi üçün zəruri şərtdir.

Başlıca

  • ViewController Lifecycle — UIKit tərəfindən ciddi ardıcıllıqla çağırılan altı UIViewController metodudur
  • loadView Storyboard istifadə etmədikdə View iyerarxiyasını yaradır
  • viewDidLoad bir dəfə çağırılır və ekranın ilkin qurulması üçün uyğundur
  • viewWillAppearviewDidAppear hər görünmədə işləyir
  • viewWillDisappearviewDidDisappear — vəziyyətin saxlanması və təmizlənməsi üçün

ViewController Lifecycle nədir

ViewController Lifecycle — UIViewController-ın mövcudluğu boyunca UIKit-dən aldığı metodlar toplusudur. iOS tətbiqindəki hər bir ekran ardıcıl olaraq yaradılma, View-in yüklənməsi, ekranda görünmə, yoxa çıxma və yaddaşın boşaldılması mərhələlərindən keçir. UIKit hər mərhələdə müvafiq metodları avtomatik çağırır və tərtibatçı öz məntiqini əlavə edərək onları ləğv edir.

UIViewController Arxitekturası UIKit-in əsasını təşkil edir və SwiftUI dövründə belə aktuallığını qoruyur — bir çox layihələr klassik yanaşmadan və ya hibrid Arxitekturadan istifadə edir. Lifecycle-i anlamaq subviews-ın hansı anda əlçatan olduğunu, layout-un nə vaxt təhlükəsiz dəyişdirilə biləcəyini və ekranın görünməsi və ya gizlənməsi zamanı hansı əməliyyatların yerinə yetiriləcəyini proqnozlaşdırmağa imkan verir.

Həyat dövrü metodlarının hər birinin xüsusi məqsədi var: bəziləri nəzarətçinin mövcudluğu boyunca bir dəfə, digərləri isə hər görünmə və ya gizlənmədə çağırılır. Metodlar arasında məntiqi qarışdırmaq çətin aşkarlanan səhvlərə gətirib çıxarır: yaddaş sızıntıları, səhv məlumat yenilənmələri və lazımsız şəbəkə sorğuları.

UIViewController metodlarının tam dövrü

Altı metod UIViewController-ın tam həyat dövrünü təşkil edir. Onların çağırılma sırası sabitdir və naviqasiya üsulundan asılı deyil — push, present və ya unwind segue eyni cədvələ əməl edir.

loadView — kök View-in yaradılması

loadView — dövrün ilk metodu, nəzarətçinin View-i hələ mövcud olmadıqda çağırılır. Storyboard istifadə edirsinizsə, UIKit avtomatik olaraq View-i xib faylından yükləyir. interfeysi proqram vasitəsilə yaratdıqda bu metodu ləğv edir və kök View-i əl ilə təyin edirsiniz. Əksər layihələrdə loadView-ə toxunulmur — iş viewDidLoad-da aparılır.

loadView-i ləğv etmək yalnız xüsusi hallarda tələb olunur: bütün interfeys Storyboard olmadan kodla yaradıldıqda və ya kök View qeyri-standart sinifdən olmalı olduqda. Apple ləğv edərkən super.loadView-ə müraciət etməməyi tövsiyə edir — View-in yaradılmasını tamamilə öz üzərinizə götürürsünüz.

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

viewDidLoad — birdəfəlik initallaşdırma

viewDidLoad — dövrün ən çox istifadə olunan metodudur. View yaddaşa yükləndikdən sonra, lakin hələ ekranda göstərilməmişkən bir dəfə çağırılır. Burada subviews konfiqurasiya edilir, cədvəllər məlumatlarla doldurulur, hücrələr qeydiyyatdan keçirilir və nəzarətçinin bütün ömrü boyu fəaliyyət göstərən bildirişlərə abunə olunur.

Əhəmiyyətli xüsusiyyət: viewDidLoad ekranın təkrar göstərilməsi zamanı təkrar çağırılmır. Hər görünmədə məlumatları yeniləmək lazımdırsa — viewWillAppear-dan istifadə edin. viewDidLoad-da yalnız əsas konfiqurasiyadan asılı olan birdəfəlik əməliyyatları yerləşdirin.

viewWillAppear — göstərmədən əvvəl hazırlıq

viewWillAppear hər dəfə View istifadəçi üçün görünməzdən əvvəl bilavasitə çağırılır. Bu metod animated parametrini alır ki, bu da görünmənin animasiya ilə baş verib-vermədiyini göstərir. Burada məlumatlar yenilənir, cədvəllər yenidən yüklənir, NavigationBar konfiqurasiya edilir və tətbiqin vəziyyətindən asılı olaraq elementlər gizlədilir və ya göstərilir.

viewWillAppear-dan ekranlar arasında vəziyyətin sinxronlaşdırılması üçün istifadə edin: əgər istifadəçi əvvəlki ekranda məlumatları dəyişmiş ola bilərsə, bu metod interfeysi yeniləmək üçün düzgün yerdir. Hər viewWillAppear çağırışı, hətta alt nəzarətçidən qayıdarkən belə, ekranın görünməsindən əvvəl baş verir.

viewDidAppear — ekran tam görünür

viewDidAppear View-in ekranda tam göründüyünü və bütün keçid animasiyalarının tamamlandığını bildirir. Bu anda ekran qarşılıqlı əlaqəyə hazırdır — istifadəçi tam interfeysi görür və onunla işləyə bilər. Bu metod görünmədən sonra başlamalı olan animasiyaları işə salmaq, taymerləri başlatmaq və analitika göstərişlərini izləmək üçün uyğundur.

viewWillAppear-dan fərqli olaraq, viewDidAppear ekranın təkcə görünür deyil, həm də tam çəkilmiş olduğunu təmin edir. viewWillAppear-da animasiya işə salırsınızsa, bəzi kadrların ötürülməsi mümkündür, çünki UIKit keçidi hələ tamamlamamışdır. Hamar animasiyalar üçün viewDidAppear-dan istifadə edin.

viewWillDisappear — gizlənməyə hazırlıq

viewWillDisappear View-in ekrandan yoxa çıxmasından əvvəl çağırılır — başqa nəzarətçiyə keçid, modal pəncərənin bağlanması və ya tətbiqin kiçildilməsi zamanı. Bu, vəziyyəti saxlamaq, bildirişlərdən çıxmaq, aktiv prosesləri dayandırmaq və ekran görünmədikdə lazım olmayan resursları boşatmaq üçün düzgün yerdir.

Xatırlamaq vacibdir: viewWillDisappear View-in nəhayətdə yoxa çıxacağına zəmanət vermir — jest ləğv edilə bilər. Buna görə kritik məlumatları həmçinin yalnız faktiki yoxa çıxmadan sonra çağırılan viewDidDisappear-da saxlayın.

viewDidDisappear — ekran gizləndi

viewDidDisappear görünmə və yoxa çıxma dövrünü tamamlayır. View artıq ekrandan gizləndikdən sonra çağırılır. Bu metodda animasiyalar tamamilə dayandırılır, müvəqqəti obyektlər silinir və viewWillDisappear-da başladılan məlumatların saxlanması təsdiqlənir.

Bu metod həmçinin nəzarətçinin deinit-indən əvvəl gəlir — əgər UIViewController məhv edilirsə, viewDidDisappear deinit çağırılmazdan əvvəl Lifecycle-ın son metodu olacaqdır. Obyekt məhv edilməzdən əvvəl baş verməli olan yekun təmizləmə üçün istifadə edin.

Hər bir metod nə vaxt çağırılır

Çağırılma ardıcıllığı ekranın necə göründüyündən asılıdır: ilk dəfə, geri qayıdarkən və ya modal göstərilərkən. UIKit baxımından üç əsas ssenarini nəzərdən keçirək.

İlk açılış zamanı ardıcıllıq

Ekranın ilk görünməsində UIKit tam yaradılma dövründən keçir: loadView, sonra viewDidLoad çağırılır, ardından görünmə animasiyası başlayır. Animasiya zamanı viewWillAppear, bitdikdən sonra isə viewDidAppear çağırılır. Bu, loadView-dən viewDidAppear-a qədər bütün metodların ardıcıl çağırıldığı yeganə ssenaridir.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    print("viewDidLoad — View yaddaşa yükləndi")
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    print("viewWillAppear — tezliklə görünəcək")
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    print("viewDidAppear — ekran tam görünür")
}

Geri qayıdarkən ardıcıllıq

İstifadəçi əvvəlki ekrana qayıtdıqda, UIKit viewDidLoad-ı təkrar çağırmır — View artıq yaddaşa yüklənmiśdir. Bunun əvəzinə qayıdan ekranda yalnız viewWillAppear və viewDidAppear, cari ekranda isə viewWillDisappear və viewDidDisappear işləyir. loadView və viewDidLoad ötürülür, çünki ekran artıq naviqasiya yığınında mövcuddur.

Present və dismiss zamanı xüsusiyyətlər

Modal göstərmə eyni qaydalara tabedir: yeni nəzarətçi ilk görünmədə tam dövrdən keçir, cari isə viewWillDisappear və viewDidDisappear çağırır. Dismiss zamanı sıra tərsinədir: qayıdan nəzarətçidə viewWillAppear və viewDidAppear, gizlənən nəzarətçidə isə tamamlayıcı metodlar işləyir. Bu davranış UIKit-dəki bütün keçid növləri üçün vahiddir.

Praktik istifadə ssenariləri

Lifecycle-i anlamağın kod keyfiyyətinə və istifadəçi təcrübəsinə birbaşa təsir etdiyi dörd əsas ssenarini nəzərdən keçirək. Hər ssenari üçün tövsiyələrlə nümunə veririk.

viewDidLoad-da məlumatların initallaşdırılması

viewDidLoad — ekranın görünməsindən asılı olmayan ilkin qurulma üçün yerdir. Burada collectionView konfiqurasiya edilir, hücrələr üçün nib faylları qeydiyyatdan keçirilir, data source və layout yaradılır. Şəbəkədən məlumat yükləyirsinizsə, viewDidLoad-da yalnız sorğunu başlatmaq, interfeysi isə ekran göstərilməyə hazır olduqda viewWillAppear-da yeniləmək daha yaxşıdır.

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

viewWillAppear-da məzmunun yenilənməsi

Ekran hər görünəndə məlumatları sinxronlaşdırmaq üçün viewWillAppear-dan istifadə edin. Məsələn, istifadəçi əvvəlki ekranda parametrləri dəyişmiş ola bilərsə, burada göstərilən dəyərlər yenilənir, cədvəl yenidən yüklənir və NavigationBar-ın vəziyyəti düzəldilir. Bu, ekranın istənilən naviqasiya ssenarisində həmişə aktual məlumatları göstərməsini təmin edir.

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

viewDidAppear-da analitika və animasiyalar

viewDidAppear istifadəçi ekranı gördükdən sonra başlamalı olan animasiyaları işə salmaq üçün idealdır. Burada həmçinin analitika hadisələri göndərilir: ekranın göstərilməsi, onboarding-in başlanması və ya video oxutmanın başlaması. Keçid tamamlanmazdan əvvəl animasiyaları işə salmaq sərçəli interfeysə gətirib çıxarır — UIKit kifayət qədər kadr hazırlamağa vaxt tapmır.

viewWillDisappear-da vəziyyətin saxlanması

viewWillDisappear-da qaralamalar saxlanılır, taymerlər dayandırılır və NotificationCenter-dən çıxılır. Bu, ekranın hələ göründüyü və istifadəçi kontekstini tələb edən əməliyyatlar üçün əlçatan olduğu son andır. Kritik məlumatlar üçən əlavə olaraq ləğv edilmiş jestlərdən qorunmaq üçün viewDidDisappear-dan istifadə edilir.

Lifecycle ilə işləyərkən tipik səhvlər

Həyat dövrü metodlarının yanlış istifadəsi iOS tətbiqlərində səhvlərin ən geniş yayılmış mənbələrindən biridir. UIViewController ilə işləyərkən tərtibatçıların müxtəlif mərhələlərdə yol verdiyi əsas səhvləri nəzərdən keçirək.

Birinci səhv — Storyboard varkən init və ya loadView-də subviews yaratmaq. Interface Builder istifadə edirsinizsə, loadView-i lazımsız yerə ləğv etməyin. Mövcud storyboard ilə loadView-də View yaratmaq xib faylının nəzərdən qaçırılmasına və boş ekrana gətirib çıxarır.

İkinci səhv — viewDidLoad-da klaviatura bildirişlərinə abunə olub çıxmamaq. UIResponder.keyboardWillShowNotification-a abunə olmusunuzsa, lakin ekran gizlənərkən çıxmamısınızsa, blok nəzarətçinin deinit-indən sonra da çağırılacaq — bu, tətbiqin potensial çökməsi ilə yaddaş sızıntısıdır.

Üçüncü səhv — ekran görünməmişkən işə salınan taymerlər və şəbəkə sorğuları. View hələ görünmədikdə şəkillərin yüklənməsi və ya animasiyaların icrası resursların boş yerə sərf edilməsidir. Vizual yeniləmələri viewWillAppear və ya viewDidAppear-a köçürün.

Dördüncü səhv — məlumatları yalnız viewWillDisappear-da saxlamaq. interaktiv pop jesti zamanı istifadəçi sürüşdürməyə başlayıb ləğv edə bilər — metod çağırıldı, lakin ekran yoxa çıxmadı. Kritik məlumatların saxlanmasını viewDidDisappear-da və ya applicationDidEnterBackground handlerində təkrarlayın.

Tez-tez verilən suallar

Nəzarətçinin ömrü boyu viewDidLoad neçə dəfə çağırılır?

Bir dəfə — View yaddaşa yükləndikdən sonra. Ekranın təkrar görünməsində viewDidLoad çağırılmır. View-i yenidən yaratmaq lazımdırsa, nəzarətçi məhv edilməli və yenidən yaradılmalıdır.

viewDidLoad-da super çağırılmasa nə olar?

UIKit həyat dövrü üçün super.viewDidLoad-ın çağırılmasını tələb edir. Olmadan layout yenilənməsi və keçid emalı ilə bağlı problemlər yarana bilər. Həmişə metoda ilk olaraq super-i çağırın.

Storyboard və proqram loadView eyni anda istifadə edilə bilərmi?

Tövsiyə edilmir. Nəzarətçi Storyboard-dan initallaşdırılıbsa, UIKit avtomatik olaraq View-i xib-dən yükləyir. loadView-i ləğv etmək bu prosesi ləğv edir və storyboardınız nəzərdən qaçırılacaq.

NotificationCenter-dən necə düzgün çıxmaq olar?

viewDidLoad və ya viewWillAppear-da abunə olun, viewWillDisappear və ya viewDidDisappear-da isə bağlantını kəsin, self-ə zəif istinaddan istifadə edərək qapanmalarda yaddaş sızıntılarından qaçının.

Niyə force quit zamanı viewDidDisappear çağırılmır?

Force quit prosesi məcburi şəkildə dayandırır — UIKit Lifecycle metodlarını çağırmağa vaxt tapmır. Məlumatları saxlamaq üçün AppDelegate-də UIApplication.willTerminateNotification bildirişindən istifadə edin.

Xülasə

  • ViewController Lifecycle UIKit tərəfindən sabit ardıcıllıqla çağırılan altı metoddan ibarətdir
  • loadViewviewDidLoad nəzarətçi yaradılarkən bir dəfə işləyir
  • viewWillAppearviewDidAppear ekran hər görünəndə çağırılır
  • viewWillDisappearviewDidDisappear — hər gizlənmədə
  • Hər metodun xüsusi məqsədi var — məntiqi qarışdırmaq səhvlərə gətirir
  • Bildirişlərə abunə həmişə müvafiq metodda bağlantının kəsilməsi ilə balanslaşdırılır
  • Animasiyalar və analitika üçün viewDidAppear, vəziyyətin saxlanması üçün viewWillDisappear istifadə edin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun