Sobes.tech
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:

  1. 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:
      • structenum (çünki onlar sinif irsiyyətini dəstəkləmir).
      • final sinif metodları.
      • private sinif metodları (internalpublic dəstəkləmir).
      • Qlobal funksiyalar.
      • Statik metodlar.
      • Genişləndirmələr.
  2. 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")
        }
    }
    
  3. Ş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")
        }
    }
    

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.