Middle+
Swift-də idarəetmə nə vaxt və hansı şərtlərlə işləməyə başlayır?
sobes.tech Süni İntellekt
AI-dan cavab
Swift-də metodların (method dispatch) hansı kodun icra olunacağını müəyyən edir. Dispatch növünün seçimi Swift kodunun tərtib olunma zamanı baş verir.
Swift-də üç əsas dispatch növü mövcuddur:
-
Birbaşa dispatch (Direct Dispatch):
- Ən sürətli.
- Funksiyanın ünvanı tərtib zamanı məlum olur.
- Standart olaraq aşağıdakı üçün tətbiq edilir:
structvəenum(çünki onlar sinif irsiyyətini dəstəkləmir).finalsinif metodları.privatesinif metodları (internalvəpublicdəstəkləmir).- Qlobal funksiyalar.
- Statik metodlar.
- Genişləndirmələr.
-
Cədvəl dispatch (Table Dispatch):
classüçün istifadə olunur, polimorfizm və irsiyyət tələb olunduqda.- Metodun konkret tətbiqinin ünvanı işləmə zamanı (runtime) virtual metodlar cədvəli (vtable - Virtual Table) istifadə edilərək müəyyən edilir.
- Hər sinifin öz vtable-i var, metodların tətbiqlərinə göstəricilər ehtiva edir.
- İrsiyyət və metodların üst-üstə qoyulmasını dəstəkləyir.
class Animal { // Cədvəl dispatch istifadə ediləcək func speak() { print("Naməlum səs") } } class Dog: Animal { // Overriding, vtable istifadə edir override func speak() { print("Hav") } } -
Şahid cədvəli dispatch (Witness Table Dispatch):
- Protokollar (
protocol) üçün istifadə olunur. - Cədvəl dispatch-ə bənzəyir, lakin protokol metodunun tətbiqini tapmaq üçün şahid cədvəli (witness table) istifadə edir.
- Protokollar ilə polimorfizmə imkan verir.
protocol Speakable { // Witness Table Dispatch tətbiq olunur func speak() } struct Cat: Speakable { // Protokol tətbiqi func speak() { print("Miyav") } } - Protokollar (
Seçimə təsir edən şərtlər:
- Məlumat tipi:
struct,enum,class,protocol. - Giriş modifikatorları:
final,private,internal,public. - İrsiyyət: Metodların üst-üstə qoyulması imkanı.
- Protokollara uyğunluq: Protokol metodlarının tətbiqi.
- Çağırış konteksti: Konkret tip və ya protokol/əsas sinif vasitəsilə çağırış.
Swift tərtibçisi mümkün qədər birbaşa dispatch istifadə etməyə çalışır, performansı optimallaşdırmaq üçün, lakin ehtiyac olduqda, polimorfizm və irsiyyət dəstəyi üçün cədvəl və ya şahid cədvəli dispatch-ə keçir. final və ya private kimi açıq şəkildə qeyd olunan metodlar birbaşa dispatch istifadə edilməsini məcbur edir.