iOS Uygulamalarında ViewController Yaşam Döngüsü
Merhaba, Medium’daki ilk yazımda bilinmesinin büyük önem taşıdığını düşündüğüm ViewController yaşam döngüsünden bahsedeceğim. Storyboard, xib veya programatik fark etmeksizin oluşturulan her view aynı yaşam döngüsüne sahip ve bu view’ların ne zaman created, loaded, appeared veya destroyed durumlarında olduklarını bu yazımda birlikte inceleyeceğiz. Daha fazla lafı uzatmadan hemen başlayalım.
Peki ne işimize yarayacak bu yaşam döngüsünü bilmek?
Bir ViewController oluşturmamızdaki temel hedef, kullanıcı ile etkileşimi sağlayacak olan arayüzün tanımlanmasıdır. Bu arayüzü bir instagram ana sayfası olarak düşünebilirsiniz, hikayeler, gönderiler, beğen butonu gibi. Yalnızca arayüz değil veri akışı da bu alanlarda ekranda veya arka planda gerçekleşir.
Bu açıdan baktığımızda arayüzdeki hem görsel hem de veri güncelleme ve değişiklikleri doğru bir şekilde yönetmemiz gerektiğini anlıyoruz. Ne zaman yeni bir view güncellemesi yapmalıyım? Ne zaman text güncellemesi yapmalıyım? Ne zaman servis isteklerini göndermeliyim? Bu tarz soruların cevabı konumuz olan ViewController yaşam döngüsünü bilmekten geçiyor.
ViewController yaşam döngüsünü yönetmek
iOS uygulamalarında ilk başta değindiğim yaşam döngüsü olaylarını yönetmek için özel fonksiyonlarımız mevcut. Bir ViewController ne zaman oluşturuldu, yüklendi, ekranda görünür oldu ve ekrandan kayboldu gibi. Şimdi tek tek bu fonksiyonların ne işe yaradıklarından bahsedeceğim. Fonksiyon açıklamaları yaşam döngüsü sıralarına göre yapılmıştır.
1-) loadView()
· Bir ViewControler yaşam döngüsünde yalnızca bir defa tetiklenir.
· Bir ViewController’ın RootViewController’ının oluşturulduğu fonksiyondur.
· ViewController’ımızın tüm property’leri bu anda nil’dir.
2-) viewDidLoad()
· ViewController create olduktan sonra yalnızca bir kere çağırılır.
· Kullanıcı view’ı görmeden önce arayüzü tanımlamalarının ve veri aktarımının sağlanmasını tercih ettiğimiz fonksiyondur.
· View yüklenmeden önce yalnızca bir kere servis çağrısı yapmak istiyorsak genelde burayı kullanırız.
· View’ımızın bounds özelliğinin henüz buradayken set edilmediğini unutmayın.
3-) viewWillAppear()
· View ekranda görüntülenmeden hemen önce tetiklenen fonksiyondur.
· Farklı bir ekrana geçiş yaptıktan sonra geri geldiğimizde bile view tekrar tekrar her ekrana gelmeden önce tetiklenir.
· Genelde, view ekranda her görünür olmadan önce yapmayı planladığımız işlemleri bu fonksyion içerisinde yaparız.
4-) viewWillLayoutSubViews()
· ViewController’ımıza içerdiği subView’ların düzenlenmekte olduğunu bildirir.
· View’ımızın bounds özelliğini öğrendiğimiz ilk andır.
· View elemanlarımızın frame değişikliklerinin gerçekleştiği ilk yerdir.
5-) viewDidLayoutSubViews()
· Tüm subView nesnelerimizin set edildiği, size, position ve constraint özelliklerinin tanımlandığı yerdir.
· viewWillLayoutSubViews ve viewDidLayoutSubViews ayrıca cihazın orientation özelliği değiştirildiğinde de tetiklenir. (Cihazın Yatay ve Dikey pozisyonu)
6-) viewDidAppear()
· ViewController artık ekranda görünür hale gelmiştir.
· Anismasyon tetiklenmesi, video, ses oynatılmasına başlanılması gibi işlemlere bu fonksiyon tetiklendiğinde başlayabiliriz.
7-) viewWillDisappear()
· View, görünür ekrandan kaybolmadan hemen önce tetiklenir.
· Yaşam döngüsü içerisinde birden fazla kez çalışabilir.
· Veri kaydetmek istediğimizde, servis çağrılarını sonlandırmak istediğimizde kullanabiliriz.
8-) viewDidDisappear()
· View, ekranımızdan tamamen kaybolduğunda bu fonksiyon tetiklenir.
· Genellikle view kaybolduğunda artık arka planda çalışmasını istemediğimiz işlemleri iptal etmek için kullanırız. Örneğin, Notification dinlemesi gibi.
Basit bir şekilde ViewController yaşam döngüsünden bahsetmeye çalıştım ve temek bilgileri öğrendik. Tabii ki yalnızca ViewController yaşam döngüsünü bilmek yeterli olmayacaktır. Application Lifecycle, View Lifecycle gibi konular da mevcut. Bu yaşam döngülerine hakim olmak yazdığımız kodun daha anlamlı hale gelmesini sağlayacaktır. Eğer sormak istediğiniz sorular varsa yorumlarda veya direkt bana mail atarak sorabilirsiniz. Okuduğunuz için teşekkürler, geri dönüşleriniz benim için çok önemli.