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:
-
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).
finalvə yaprivateilə işarələnmiş metodlar (əgər@objcyoxdursa və dinamik dispatch Objective-C runtime vasitəsilə istifadə olunmursa).- Qlobal və statik funksiyalar.
- Extension.
-
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ı),
finalvə yaprivateilə 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") } } - Sinif nümunəsi metodları (sinif metodları),
-
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 dynamicilə işarələnmiş metodlar.@objc dynamicilə 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.