UIViewController Yaşam Döngüsü

Geliştirdiğimiz her iOS uygulamasının yaşam döngüsü metodları vardır. Bu metodlar ekranların doğru şekilde ve doğru sırada açılmasında, veri yüklenmesinde ve gösterilmesinde önemli rol oynar.

Çoğu zaman hangi metodun tam olarak ne işe yaradığı karışıyor. İsterseniz bunların üzerinden bir geçelim.

viewDidLoad

En çok kullandığımız UIViewController yaşam döngüsü metodu budur. İlk önce bu metod çalışır. Çalıştığı zaman bulunduğu view in kaynakları hazır demektir. Fakat burada geometrik hesaplar, API istekleri, animasyonlar vs işlemler yapılmamalıdır çünkü grafikler henüz çizilmemiştir. Burada komponentlerin görünümüyle alakalı yapılan değişikler istediğiniz sonucu üretmeyebilir. Aynı zamanda web servislerine istek atıp cevabı burada handle etmek yanlış bir durumdur çünkü tüm bu işlemler tamamlanana kadar main thread ı kitlemiş olursunuz.

viewDidLoad metodu diğer yaşam döngüsü metodlarının aksine her sahne için yalnızca bir kere çalışır. Başka bir sahneye geçiş yapıp tekrar geri döndüğünüzde viewDidLoad metodu bir daha çalışmaz. Bu nedenle bu metod içerisinde yapılması gerekenler genel olarak initialization işlemleridir. Yarattığınız değişkenleri ve object instance larını burada istediğiniz değerlere eşitlersiniz, ayarları yaparsınız, delegate metodları sahiplenirsiniz vs.

UIViewController Yaşam Döngüsü

viewWillAppear

View rame yüklenmiş, grafikler çizilmiş ve ekran gösterilmeye tamamen hazır hale gelmiştir. İşte tam bu noktada viewWillAppear metodu otomatik olarak çalışır. View komponentleri artık çizilmiş olduğu için görünümle alakalı değişikleri burada gönül rahatlığı ile yapabiliriz. Örneğin klavyeyi açabilir, NavigationBar ı gizleyebilir veya istediğiniz komponentin alpha değerini değiştirebilirsiniz.

Ama API istekleri yapmak hala yasak ❌

viewDidAppear

Image result for spinner loading

Zaman alıcı tüm işlemleri burada yaparız. Web servislerine istek yapmak, gelen cevaba göre model dizilerini doldurmak gibi çalışıp çalışmayacağı belli olmayan, çalışsa bile ne zaman biteceği belli olmayan işleri burada yapmalıyız. Aldığımız cevaba göre kullanıcıya bir şey gösterecek isek, istek tamamlanana kadar “yükleniyor” manasında bir spinner göstermek mantıklı bir harekettir.

Ayrıca ekran açılırken bazı komponentlerin animasyon efektiyle gelmesi işlemlerinin de burada yapılması doğrudur.

Animasyonlarla alakalı daha çok bilgiye UIViewAnimation Kullanımı dersinden erişebilirsiniz.

viewWillDisAppear

Bulunduğumuz sahneyi terketmeden hemen önce grafikle alakalı işlemleri burada yapmalıyız. Genelde viewWillAppear içinde kapattığımız özellikleri burada geri açarız. Örneğin ekran açılırken klavyenin görünür olmasını istemişsek, ekrandan çıkarkende klavyeyi kapatma işlemini burada yapabiliriz.

Ayrıca ekranın o anki state ini kaydetmek için veya bir network isteğini iptal etmek için de kullanabiliriz.

viewDidDisAppear

Mevcut ekran gözden kaybolduğunda çalışır. Muhtemelen çok az ihtiyaç duyacağınız bir metoddur. Notification ları remove etmek için vs kullanabilirsiniz.