Sobes.tech
Middle+

Swift'te dağıtım ne zaman ve hangi koşullarda çalışmaya başlar?

sobes.tech yapay zeka

AI'dan gelen yanıt

Swift'te metod dağıtımı (method dispatch), bir nesnenin metodunu çağırırken hangi kodun çalıştırılacağını belirler. Dağıtım türü, Swift kodunun derlenme anında seçilir.

Swift'te üç ana dağıtım türü vardır:

  1. Doğrudan Dağıtım (Direct Dispatch):

    • En hızlı olanıdır.
    • Fonksiyonun adresi derleme sırasında bilinir.
    • Varsayılan olarak uygulanır:
      • struct ve enum (sınıf kalıtımını desteklemedikleri için).
      • final sınıf metodları.
      • private sınıf metodları (internal ve public desteklemez).
      • Küresel fonksiyonlar.
      • Statik metodlar.
      • Uzantılar.
  2. Tablo Dağıtımı (Table Dispatch):

    • class için kullanılır, polimorfizm ve kalıtım gerektiğinde.
    • Belirli bir metodun adresi, çalışma zamanında (runtime) sanal metod tablosu (vtable - Virtual Table) kullanılarak belirlenir.
    • Her sınıfın kendi vtable'ı vardır, metodların uygulamalarına işaretçiler içerir.
    • Kalıtımı ve metodların yeniden tanımlanmasını destekler.
    class Animal { // Tablo Dağıtımı kullanılır
        func speak() {
            print("Bilinmeyen ses")
        }
    }
    
    class Dog: Animal { // Yeniden tanımlama, vtable kullanır
        override func speak() {
            print("Hav")
        }
    }
    
  3. Tanık Tablosu Dağıtımı (Witness Table Dispatch):

    • Protokoller (protocol) için kullanılır.
    • Tablo dağıtımına benzer, ancak protokol metodunun uygulamasını bulmak için tanık tablosu (witness table) kullanır.
    • Protokollerde polimorfizmi mümkün kılar.
    protocol Speakable { // Witness Table Dispatch uygulanır
        func speak()
    }
    
    struct Cat: Speakable { // Protokol uygulaması
        func speak() {
            print("Miyav")
        }
    }
    

Seçimi etkileyen koşullar:

  • Veri tipi: struct, enum, class, protocol.
  • Erişim belirteçleri: final, private, internal, public.
  • Kalıtım: Metodların yeniden tanımlanabilmesi.
  • Protokollere uygunluk: Protokol metodlarının uygulanması.
  • Çağrı bağlamı: Belirli bir tip veya protokol/tip temel sınıfı üzerinden çağrı.

Swift derleyicisi, performansı optimize etmek için mümkün olan her yerde doğrudan dağıtımı kullanmaya çalışır, ancak polimorfizm ve kalıtım desteği gerektiğinde tablo veya tanık tablosu dağıtımına geçer. final veya private olarak açıkça işaretlenmiş metodlar, doğrudan dağıtımın kullanılmasını zorlar.