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:
-
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:
structveenum(sınıf kalıtımını desteklemedikleri için).finalsınıf metodları.privatesınıf metodları (internalvepublicdesteklemez).- Küresel fonksiyonlar.
- Statik metodlar.
- Uzantılar.
-
Tablo Dağıtımı (Table Dispatch):
classiç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") } } -
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") } } - Protokoller (
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.