Xcode — UIKit — Lifecycle’lar nedir? Nerelerde kullanılmalıdır?
iOS programlama dilinde önemli bir kavram olan UIViewController’ın yaşam döngüsünden türkçe olarak bahsedeceğim. Projelerimizde ve bazı teorik alanlarda sıklıkla ihtiyaç duyacağınız bu yapının nasıl çalıştığını öğrenmek adına açıklamada bulunuyorum.
UIViewController
UIKit üzerinde kullandığımız kütüphanenin sınıfıdır ve iOS uygulamalarımızda görünen her bir sayfayı yöneten büyük bir yapıdır. Arayüzde kullandığımız tüm elemanları bir araya getirerek kullanıcıların dokunduğu ekranlarda bu nesneler ile etkileşim kurmasını sağlar.
Biz genellikler UIViewController’dan inherit olmuş sınıflar ile çalışmaktayız. Örneğin, HomeViewController.swift yada FavoriteViewController.swift dosyanız bir UIViewController’dan türemiştir. Kullanıcı ve UIView nesneleri arasındaki etkileşimi yönetir. Bu View nesnelerinde gerçekleşen olaylardaki verileri günceller.
Resim 1'de görünenin yanı sıra yaşam döngüsünü detaylı aşağıda açıklayalım.
1– init
2- loadView
3- viewDidLoad
4- viewWillAppear
5- viewDidAppear
6- viewWillDisappear
7- viewDidDisappear
- viewDidLoad
Bu fonksiyon bir UIViewController’da 1 defa çalışmaktadır. Çağırıldığında ViewController oluşturulur ve buna bağlı tüm IBOutlet Variables’lar hazır hale gelir. Eğer Api’den bir defalık veri çekmeniz gerekirse bu fonksiyon en uygunudur.
- viewWillAppear
UIViewController görünmeden hemen önce çağrılır. Alanları gizlemek & göstermek veya ekranın görünmesinden önce her defasında olmasını istediğiniz işlemler için uygundur.
- viewDidAppear
UIViewController görüntülendikten hemen sonra çağrılır. Bir animasyonu başlatmak veya bir API’dan verilerin yüklenmeye başlaması için uygun bir noktadır.
- viewWillDisappear
viewWillAppear metoduna benzer olarak bu fonksiyon da bir UIViewController objesi ekrandan kaybolmadan hemen önce çalışır. viewWillAppear gibi bu fonksiyonda bir UIViewController objesinin hayat döngüsü boyunca birden fazla kez çalışabilir. Kullanıcı farklı bir sayfaya geçmeye başladığında çalışır.
- viewDidDisappear
Bir UIViewController objesi ekrandan kaybolduktan sonra bu fonksiyon çalışır. Kaybolduktan sonra arkada çalışmaya devam etmesini istemediğiniz işlemler için genellikle bu fonksiyonu override edersiniz.
class HomeViewController: UIViewController {
let name: String
init(name: String) {
self.name = name
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func loadView() {
super.loadView()
self.logMethod()
}
override func viewDidLoad() {
super.viewDidLoad() // Do any additional setup after loading the view.
self.logMethod()
}
func logMethod(function: StaticString = #function) {
print("VC \(self.name) - \(function) invoked")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.logMethod()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.logMethod()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.logMethod()
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
self.logMethod()
}
}
Sayfa açıldı;
- loadView() çalıştı,
- viewDidLoad() çalıştı,
- viewWillAppear() çalıştı,
- viewDidAppear() çalıştı.