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:
-
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).
finalveyaprivateolarak işaretlenmiş sınıf metodları (eğer@objcyoksa ve dinamik dispatch Objective-C çalışma zamanı aracılığıyla kullanılmıyorsa).- Küresel ve statik fonksiyonlar.
- Extensionlar.
-
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),finalveyaprivateolarak 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") } } - Sınıf örneği metodları (
-
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 dynamicolarak işaretlenmiş metodlar.@objc dynamicolarak 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.