Sobes.tech
Middle

Dağıtım nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Dispatch, proqramın icrası zamanı hansı metod və ya funksiyanın icra olunacağını müəyyən edən prosesdir.

Swift-də üç əsas dispatch növü mövcuddur:

  1. Statik (Statik və ya birbaşa Dispatch): Ən sürətli. Kompilyator dəqiq bilir hansı metodun çağırılacağını, kompilyasiya zamanı. Metodu tapmaq üçün əlavə xərclər yoxdur. Aşağıdakı üçün tətbiq edilir:

    • Struktur (struct).
    • Enum (enum).
    • final və ya private ilə işarələnmiş metodlar (əgər @objc yoxdursa və dinamik dispatch Objective-C runtime vasitəsilə istifadə olunmursa).
    • Qlobal və statik funksiyalar.
    • Extension.
  2. Cədvəl əsaslı (Table Dispatch): Siniflər üçün istifadə olunur. Hər sinif üçün virtual cədvəl (vtable) yaradılır, metodların tətbiqlərinə işarə edən göstəriciləri ehtiva edir. Metod çağırıldıqda, göstərici cədvəldə axtarılır. Kiçik əlavə xərclər. Aşağıdakı üçün:

    • Sinif nümunəsi metodları (sinif metodları), final və ya private ilə işarələnməyib.
    • Hesablanan xüsusiyyətlər (computed properties).
    class Animal {
        func speak() { // Cədvələ əsaslanan Dispatch
            print("...")
        }
    }
    
    class Dog: Animal {
        override func speak() { // Overridden metod, həmçinin cədvələ əsaslanan Dispatch
            print("Woof")
        }
    }
    
  3. Dinamik (Dynamic Dispatch): Ən yavaş. Metodun həll olunması icra zamanı Objective-C runtime vasitəsilə həyata keçirilir. Objective-C ilə qarşılıqlı əlaqə üçün istifadə olunur. Əhəmiyyətli xərclər var. Aşağıdakı üçün:

    • @objc dynamic ilə işarələnmiş metodlar.
    • @objc dynamic ilə işarələnmiş xüsusiyyətlər.
    • Key-Value Observing (KVO).
    • Key-Value Coding (KVC).
    class SomeClass: NSObject {
        @objc dynamic func performAction() { // Dynamic Dispatch
            print("Performing action")
        }
    }
    

Xülasə cədvəli:

Tip Sürət Əlavə xərclər Harada tətbiq olunur
Statik Yüksək Aşağı Struct, Enum, final və ya private metodlar, extensionlar
Cədvələ əsaslanan Orta Orta Siniflərin nümunə metodları ( final və ya private olmayan)
Dinamik Aşağı Yüksək @objc dynamic

Dispatch növünün seçimi performansın optimallaşdırılması üçün vacibdir. Swift standart olaraq ən səmərəli növü seçir, bu da lazım olduqda polimorfizmin çevikliyini qoruyur (siniflər üçün cədvələ əsaslanan dispatch istifadə edir). final və ya private istifadə etmək, kompilyatora statik dispatch tətbiq etməyə kömək edə bilər.