Middle
Vue denetleyicisinin yaşam döngüsü hakkında bana anlat.
sobes.tech yapay zeka
AI'dan gelen yanıt
iOS'taki bir UIViewController görünüm denetleyicisinin yaşam döngüsü, onun oluşturulmasından yok edilmesine kadar geçen olayların bir dizisidir. Ana aşamalar:
- Başlatma:
init?(coder aDecoder: NSCoder): Storyboard/Nib'den başlatma.init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?): Bir Nib dosyasından veya programatik olarak Nib olmadan başlatma.loadView(): Denetleyicinin kök görünümünü yükleme veya oluşturma. Storyboard/Nib kullanılıyorsa otomatik çağrılır. Programatik oluşturma için üzerine yazılmalıdır.
- Görünümün yüklenmesi:
viewDidLoad(): Denetleyicinin görünümünün belleğe yüklendikten sonra çağrılır. Geometrilere erişim gerektirmeyen başlangıç ayarları için uygundur.
- Görünümün görünmesi:
viewWillAppear(_ animated: Bool): Görünüm görünür olmadan hemen önce çağrılır. Aralarındaki değişebilecek verileri güncellemek için uygundur.viewDidAppear(_ animated: Bool): Görünüm görünür olduktan sonra çağrılır. Tam gösterimden sonra yalnızca animasyonları başlatmak veya diğer görevleri yapmak için uygundur.
- Görünümün kaybolması:
viewWillDisappear(_ animated: Bool): Görünüm kaybolmadan hemen önce çağrılır. Durumu kaydetmek veya aktiviteleri durdurmak için uygundur.viewDidDisappear(_ animated: Bool): Görünüm kaybolduktan sonra çağrılır. Kaynakları serbest bırakmak veya arka planda gerek olmayan işlemleri durdurmak için uygundur.
- Düzen değişiklikleri:
viewWillLayoutSubviews(): Denetleyicinin görünümleri boyutlarını değiştirmeden önce çağrılır.viewDidLayoutSubviews(): Denetleyicinin görünümleri boyutlarını değiştirdikten sonra çağrılır. Boyut ve konum ayarlarını son hale getirmek için uygundur.
- Trait Collection değişiklikleri:
traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?): Çevre özellikleri değiştiğinde çağrılır, örn. sınıf boyutu, ekran yoğunluğu, açık/koyu mod vb.
- Belleğin serbest bırakılması (Deinitialization):
deinit: Nesne hafızadan kaldırılmadan hemen önce çağrılır. Kaynakları temizlemek, bildirimleri iptal etmek vb. için kullanılır.
Önemli noktalar:
loadView,viewDidLoad,viewDidAppear,viewWillDisappear,viewDidDisappear,deinitmetodları denetleyici nesnesinin yaşam döngüsünde yalnızca bir kez çağrılır.viewWillAppearveviewDidAppearmetodları birkaç kez çağrılabilir, örn. ileri ve geri gezinme sırasında.
Bir denetleyicinin oluşturulması ve gösterilmesi sırasında çağrı dizisinin örneği:
// Başlatma (Storyboard/Nib'den ise)
init?(coder aDecoder: NSCoder)
// Veya başlatma (programatik ise)
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
// Görünümün yüklenmesi
loadView()
viewDidLoad()
// Görünümün görünmesi
viewWillAppear(true)
// ... görünüm görünür hale geldi ...
viewDidAppear(true)
// Görünümün kaybolması (örneğin, başka bir VC'ye geçişte)
viewWillDisappear(true)
// ... görünüm görünmez oldu ...
viewDidDisappear(true)
// Belleğin serbest bırakılması (artık güçlü referanslar yoksa)
deinit