Middle
მითხარით Vue კონტროლერის სიცოცხლის ციკლზე.
sobes.tech AI
პასუხი AI-სგან
iOS-ში UIViewController ტიპის კონტროლერის ციკლი წარმოადგენს მოვლენების სერიას, რომლებიც ხდება მისი შექმნიდან განადგურებამდე. ძირითადი ეტაპები:
- შექმნა:
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): იძახება როდესაც ხედი გახდება უხილავი. გამოიყენება რესურსების გათავისუფლებისთვის.
- მოდელის ცვლილება (Layout):
viewWillLayoutSubviews(): იძახება როდესაც ხედის ზომები იცვლება.viewDidLayoutSubviews(): იძახება როდესაც ხედის ზომები განახლებულია. გამოიყენება ელემენტების საბოლოო განლაგებისთვის.
- ტრაიტების ცვლილება (Trait CollectionDidChange):
traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?): იძახება გარემოს მახასიათებლების ცვლილებისას.
- მეხსიერების გათავისუფლება (Deinitialization):
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