Sobes.tech
Middle

Dağıtım nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Dispatch, programın çalışma sırasında hangi belirli metodun veya fonksiyonun yürütüleceğini belirleme sürecidir.

Swift'te üç ana dispatch türü vardır:

  1. Statik (Statik veya Doğrudan Dispatch): En hızlı olanıdır. Derleyici, hangi metodun çağrılacağını tam olarak derleme zamanında bilir. Metodu bulmak için ek maliyet yoktur. Şu durumlar için kullanılır:

    • Yapılar (struct).
    • Enumlar (enum).
    • final veya private olarak işaretlenmiş sınıf metodları (eğer @objc yoksa ve dinamik dispatch Objective-C çalışma zamanı aracılığıyla kullanılmıyorsa).
    • Küresel ve statik fonksiyonlar.
    • Extensionlar.
  2. Tablo Tabanlı (Tablo Dispatch): Sınıflar için kullanılır. Her sınıf için, metodların uygulamalarına işaret eden göstericileri içeren sanal bir tablo (vtable) oluşturulur. Bir metod çağrıldığında, gösterici tabloda aranır. Az miktarda ek maliyet vardır. Kullanım alanları:

    • Sınıf örneği metodları (class methods), final veya private olarak işaretlenmemiş.
    • Hesaplanan özellikler (computed properties).
    class Animal {
        func speak() { // Tablo Dispatch
            print("...")
        }
    }
    
    class Dog: Animal {
        override func speak() { // Overridden method, also Table Dispatch
            print("Woof")
        }
    }
    
  3. Dinamık (Dinamık Dispatch): En yavaş olanıdır. Metodun çözümlemesi çalışma zamanında Objective-C çalışma zamanı aracılığıyla gerçekleşir. Objective-C ile etkileşim için kullanılır. Önemli maliyetleri vardır. Kullanım alanları:

    • @objc dynamic olarak işaretlenmiş metodlar.
    • @objc dynamic olarak işaretlenmiş özellikler.
    • Key-Value Observing (KVO).
    • Key-Value Coding (KVC).
    class SomeClass: NSObject {
        @objc dynamic func performAction() { // Dinamik Dispatch
            print("Performing action")
        }
    }
    

Özet tablo:

Tip Hız Ek maliyetler Nerede kullanılır
Statik Yüksek Düşük Struct, Enum, final/private metodlar, extensionlar
Tablo Tabanlı Orta Orta Sınıf örneği metodları ( final/private olmayan)
Dinamik Düşük Yüksek @objc dynamic

Dispatch türünün seçimi, performansı optimize etmek için önemlidir. Swift varsayılan olarak, gerektiğinde esneklik sağlayan en verimli türü seçer (sınıflar için tablo tabanlı dispatch kullanır). final veya private kullanımı, derleyicinin statik dispatch uygulamasına yardımcı olabilir.