İOS Swift

Swift İki Aşamalı İlk Değer Ataması

Swift programlama dilinde sınıf ilk değer ataması 2 aşamalı bir süreçtir.

İlk aşamada bütün stored property’lere sınıf tarafından ilk değer ataması yapılır. İkinci aşamada ise sınıflar özelleştirmek istedikleri stored propertyleri yeni instance oluşturulmadan önce tamamlarlar.

İki aşamalı ilk değer atamanın kullanılması, ilk değer atama işlemini daha güvenli ve esnek kılar. Bunuda property’lere ilk değer ataması yapılmadan önce erişerek yapar. Bu sayede property’nin değeri başka bir initializer tarafından beklenmedik bir biçimde atanmaz.

Swift programlama dilindeki ilk değer atama(initialization) süreci, Objective-C’ye benzer. En önemli fark ise, faz 1 sürecinde Objective-C ile her bir property’ye 0 değeri atarken Swift ile istediğiniz değerleri atayabilirsiniz.

Swift’in compiler’ı 4 adımdan oluşan bir güvenlik kontrol mekanizması sayesinde 2 fazlı ilk değer ataması(two phase initialization) işleminin hatasız tamamlanıp tamanlanmadığını kontrol eder.

Güvenlik Kontrolü 1

Bir designated initializer sınıf içerisindeki tüm property’lerin ilk değer atama işlemini üst sınıftan ilk değer atama işlemini delege etmeden önce sağlamalıdır.

Güvenlik Kontrolü 2

Bir designated initializer ilk değer ataması yaparken üst sınıftan miras alınan property’i refere etmelidir.

Güvenlik Kontrolü 3

Bir convenience initializer bir değer almadan önce başka bir initilizer’ı işaret etmelidir.

Güvenlik Kontrolü 4

Bir initializer instance metodları çağıramaz. Instance propertylerin değerlerini okumak için yada self i refere etmek için ilk değer atamasının ilk fazının tamamlanmasını beklemelidir.

1. Aşama

  • Bir designated yada convenience initializer bir sınıf’ta çağrılır
  • Yeni instance için hafızada bir yer ayrılır(alloce edilir). Ancak hafızadaki yer bu aşamada ilk değer atanmaz.
  • Designated initializer sınıftaki tüm stored propertylerin değerlerini aldığını kontrol eder. İşte bu aşamada bu stored propertyler için hafızada ilk değer ataması yapılır.
  • Designater initializer aynıişlemi üst sınıftaki initializer’ın yapması için tetikler.
  • Bu işlem miras alınan sınıflardan en üsttekine ulaşıncaya kadar devam eder
  • En üstteki sınıfa ulaşıldığında bu sınıftaki stored property’lerin değerlerinin olduğu kontrol edilir ve 1. aşama tamamlanır.

faz 1

2. Aşama

  • Bu aşamadan sonra en üstten aşağıya doğru tüm designated initializer’lar propertyleri düzenleyebilmekte, self e erişebilmekte ve metodları çağırabilmektedir.
  • Son olarak, convenience initializer’lar self ile çalışabilmekte ve instanceları düzenleyebilmektedir.

faz 2

 

Yorum Ekle

Yorum Yap