Sobes.tech
Middle

Дар бораи давраҳои ҳаёти контролер ва чӣ гуна онҳо даъват мешаванд, нақл кунед.

sobes.tech AI

Ҷавоб аз AI

Жыццёвы цыкл UIViewController ўключае метады, якія выклікаюцца ў пэўныя моманты яго існавання: ад стварэння да знішчэння.

Асноўныя метады жыццёвага цыклу:

  1. viewDidLoad():

    • Выклікаецца пасля загрузкі выгляду кантролера ў памяць, перад яго адлюстраваннем на экране.
    • Выкарыстоўваецца для ініцыялізацыі дадзеных, наладкі UI-элементаў, якія не залежаць ад геаметрыі выгляду.
    • Выклікаецца толькі адзін раз за час жыцця кантролера.
  2. viewWillAppear(_ animated: Bool):

    • Выклікаецца непасрэдна перад тым, як выгляд кантролера з'явіцца на экране.
    • Выкарыстоўваецца для выканання задач, якія павінны адбывацца кожны раз, калі выгляд становіцца бачным (напрыклад, абнаўленне дадзеных, анімацыі).
    • Можа выклікацца некалькі разоў.
  3. viewDidAppear(_ animated: Bool):

    • Выклікаецца пасля таго, як выгляд кантролера цалкам з'явіўся на экране і стаў бачным для карыстальніка.
    • Падыходзіць для запуску анімацый або іншых задач, якія патрабуюць, каб выгляд быў цалкам гатовы.
    • Можа выклікацца некалькі разоў.
  4. viewWillDisappear(_ animated: Bool):

    • Выклікаецца непасрэдна перад тым, як выгляд кантролера будзе выдалены з экрана (напрыклад, пры пераходзе на іншы экран).
    • Выкарыстоўваецца для захавання стану або спынення задач, якія не павінны выконвацца, пакуль выгляд не бачны (напрыклад, спыненне таймераў).
    • Можа выклікацца некалькі разоў.
  5. viewDidDisappear(_ animated: Bool):

    • Выклікаецца пасля таго, як выгляд кантролера цалкам быў выдалены з экрана.
    • Выкарыстоўваецца для ачышчэння рэсурсаў або спынення задач, якія не патрэбныя, калі выгляд не бачны.
    • Можа выклікацца некалькі разоў.
  6. viewWillLayoutSubviews():

    • Выклікаецца перад пачаткам размяшчэння падвізараў.
    • Выкарыстоўваецца для ўнясення змяненняў у канстрэйнты або фреймы перад выкананнем аўтаразметкі.
    • Можа выклікацца некалькі разоў.
  7. viewDidLayoutSubviews():

    • Выклікаецца пасля таго, як кантролер скончыў размяшчэнне падвізараў.
    • Выкарыстоўваецца для выканання задач, залежных ад канчатковых памераў падвізараў (напрыклад, наладка скролл-індыкатараў або ценяў).
    • Можа выклікацца некалькі разоў.
  8. didReceiveMemoryWarning():

    • Выклікаецца пры нізкім узроўні аператыўнай памяці.
    • Выкарыстоўваецца для вызвалення рэсурсаў, якія могуць быць пераствораны пазней.
  9. deinit:

    • Выклікаецца непасрэдна перад знішчэннем і вызваленнем аб'екта UIViewController з памяці.
    • Выкарыстоўваецца для выканання фінальнай ачысткі, напрыклад, выдалення назіральнікаў або закрыцця сеткавых злучэнняў.

Парадак выкліку:

Тыповы парадак выкліку метадаў пры з'яўленні кантролера:

  1. viewDidLoad()
  2. viewWillAppear(_ animated: Bool)
  3. viewWillLayoutSubviews()
  4. viewDidLayoutSubviews()
  5. viewDidAppear(_ animated: Bool)

Тыповы парадак выкліку метадаў пры знікненні кантролера:

  1. viewWillDisappear(_ animated: Bool)
  2. viewDidDisappear(_ animated: Bool)
  3. deinit (калі кантролер больш не патрэбны)

Прыклад рэалізацыі:

import UIKit

class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Наладка UI, ініцыялізацыя дадзеных
        print("viewDidLoad")
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        // Абнаўленне UI перад з'яўленнем
        print("viewWillAppear")
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // Пасля з'яўлення, запуск анімацый
        print("viewDidAppear")
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // Падрыхтоўка да знікнення, захаванне стану
        print("viewWillDisappear")
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        // Знікненне завершана, ачышчэнне
        print("viewDidDisappear")
    }
    
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        // Перад аўтаразметкай
        print("viewWillLayoutSubviews")
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        // Пасля аўтаразметкі
        print("viewDidLayoutSubviews")
    }

    deinit {
        // Ачыстка рэсурсаў
        print("deinit")
    }
}