Sobes.tech
Middle

Denetleyicinin yaşam döngülerinden ve bunların nasıl çağrıldığından bahsedin.

sobes.tech yapay zeka

AI'dan gelen yanıt

UIViewController yaşam döngüsü, varoluşunun belirli anlarında çağrılan yöntemleri içerir: oluşturulmadan yok edilmesine kadar.

Yaşam döngüsünün temel yöntemleri:

  1. viewDidLoad():

    • Kontrolörün görünümü belleğe yüklendikten sonra, ekran gösterilmeden önce çağrılır.
    • Veri başlatmak, görünümün geometrisine bağlı olmayan UI öğelerini yapılandırmak için kullanılır.
    • Kontrolörün yaşamı boyunca yalnızca bir kez çağrılır.
  2. viewWillAppear(_ animated: Bool):

    • Kontrolörün görünümü ekranda görünmeden hemen önce çağrılır.
    • Her görünüm görünür hale geldiğinde gerçekleşmesi gereken görevleri yapmak için kullanılır (örneğin, veri güncelleme, animasyonlar).
    • Birden çok kez çağrılabilir.
  3. viewDidAppear(_ animated: Bool):

    • Kontrolörün görünümü tamamen ekranda göründükten sonra çağrılır.
    • Animasyonları başlatmak veya görünümün tamamen hazır olmasını gerektiren diğer görevleri yapmak için uygundur.
    • Birden çok kez çağrılabilir.
  4. viewWillDisappear(_ animated: Bool):

    • Kontrolörün görünümü ekrandan kaldırılmadan hemen önce çağrılır (örneğin, başka bir ekrana geçerken).
    • Durumu kaydetmek veya görünüm görünmez olurken devam etmemesi gereken görevleri durdurmak için kullanılır (örneğin, zamanlayıcıları durdurmak).
    • Birden çok kez çağrılabilir.
  5. viewDidDisappear(_ animated: Bool):

    • Kontrolörün görünümü tamamen kaybolduktan sonra çağrılır.
    • Kaynakları serbest bırakmak veya artık gerek olmayan görevleri durdurmak için kullanılır.
    • Birden çok kez çağrılabilir.
  6. viewWillLayoutSubviews():

    • Kontrolör alt görünümlerini düzenlemeye başlamadan önce çağrılır.
    • Auto-layout'tan önce kısıtlamalarda veya çerçevelerde değişiklik yapmak için kullanılır.
    • Birden çok kez çağrılabilir.
  7. viewDidLayoutSubviews():

    • Kontrolör alt görünümlerini düzenlemeyi tamamladıktan sonra çağrılır.
    • Alt görünümlerin son boyutlarına bağlı görevleri yapmak için kullanılır (örneğin, kaydırıcı göstergeleri veya gölgeleri yapılandırmak).
    • Birden çok kez çağrılabilir.
  8. didReceiveMemoryWarning():

    • Düşük bellek seviyesinde çağrılır.
    • Daha sonra yeniden oluşturulabilecek kaynakları serbest bırakmak için kullanılır.
  9. deinit:

    • UIViewController nesnesi yok edilmeden hemen önce çağrılır.
    • Son temizlik işlemlerini yapmak için kullanılır, örneğin gözlemcileri kaldırmak veya ağ bağlantılarını kapatmak.

Çağrı sırası:

Kontrolör görünür hale gelirken tipik çağrı sırası:

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

Kontrolör kaybolurken tipik çağrı sırası:

  1. viewWillDisappear(_ animated: Bool)
  2. viewDidDisappear(_ animated: Bool)
  3. deinit (kontrolör artık gerekmediğinde)

Uygulama örneği:

import UIKit

class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // UI yapılandırması, veri başlatma
        print("viewDidLoad")
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        // Görünmeden önce UI güncellemesi
        print("viewWillAppear")
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // Görünüm tamamlandı, animasyonlar başlat
        print("viewDidAppear")
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // Kaydetme ve hazırlık
        print("viewWillDisappear")
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        // Temizlik
        print("viewDidDisappear")
    }
    
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        // Auto-layout öncesi
        print("viewWillLayoutSubviews")
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        // Auto-layout sonrası
        print("viewDidLayoutSubviews")
    }

    deinit {
        // Kaynak temizliği
        print("deinit")
    }
}