Middle
Реци ми о животном циклусу Vue контролера.
sobes.tech АИ
Одговор од АИ
Циклус живота на контролер типа UIViewController у iOS представља низ догађаја који се дешавају од његовог креирања до уништења. Главне фазе:
- Инициализација:
init?(coder aDecoder: NSCoder): Инициализација из Storyboard/Nib.init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?): Инициализација из Nib фајла или програмски без Nib.loadView(): Учитавање или креирање кореновог приказа контролера. Ако се користи Storyboard/Nib, позива се аутоматски. Кодом креирање приказа захтева преоптерећење.
- Учитавање приказа:
viewDidLoad(): Позива се након учитавања приказа контролера у меморију. Погодно за почетна подешавања која не захтевају приступ геометријама.
- Показа приказа:
viewWillAppear(_ animated: Bool): Тачно пре него што приказ контролера постане видљив. Погодно за ажурирање података.viewDidAppear(_ animated: Bool): Позива се након што приказ постане видљив. Погодно за покретање анимација или других задатака који треба да се изврше након потпуног приказа.
- Потврда приказа:
viewWillDisappear(_ animated: Bool): Тачно пре него што приказ контролера постане невидљив. Погодно за чување стања или прекид активности.viewDidDisappear(_ animated: Bool): Позива се након што приказ постане невидљив. Погодно за ослобађање ресурса или заустављање процеса који нису потребни у позадини.
- Промене распореда:
viewWillLayoutSubviews(): Позива се пре него што прикази контролера промене своје величине.viewDidLayoutSubviews(): Позива се након што прикази контролера промене своје величине. Погодно за финалну подешавање величина и позиција елемената.
- Промене у Trait Collection:
traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?): Позива се при промени карактеристика окружења, као што су величина класе, густина екрана, светли/тамни режим итд.
- Освобођење меморије:
deinit: Позива се тачно пре ослобађања објекта контролера из меморије. Користи се за чишћење ресурса, отказивање пријава итд.
Важне тачке:
- Методи
loadView,viewDidLoad,viewDidAppear,viewWillDisappear,viewDidDisappear,deinitпозивају се једном у животном циклусу објекта контролера. - Методи
viewWillAppearиviewDidAppearмогу се позивати више пута, на пример, при навигацији напред и назад.
Пример последователности позива:
// Инициализација (ако из Storyboard/Nib)
init?(coder aDecoder: NSCoder)
// Или инициализација (ако програмски)
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
// Учитавање приказа
loadView()
viewDidLoad()
// Показа приказа
viewWillAppear(true)
// ... приказ постаје видљив ...
viewDidAppear(true)
// Потврда приказа (нпр. при преласку на други VC)
viewWillDisappear(true)
// ... приказ постаје невидљив ...
viewDidDisappear(true)
// Ослобађање меморије (када нема јаке везе са контролером)
deinit