Sobes.tech
Middle

Aká je štruktúra riadenia?

sobes.tech AI

Odpoveď od AI

V Swiftu existujú tri hlavné typy dispatchu metód:

  1. Priamy dispatch (Direct Dispatch): Najrýchlejší. Kompilátor presne vie, ktorú metódu volať počas kompilácie. Predvolený pre štruktúry, final-ty, súkromné metódy.

    struct MyStruct {
        func directMethod() { // Priamy dispatch
            print("Direct")
        }
    }
    
  2. Tabuľkový dispatch (Table Dispatch): Používa sa pre metódy tried (nie final). Každá trieda má tabuľku virtuálnych metód (vtable), kde má každá metóda unikátny index. Kompilátor pristupuje k vtable počas behu, aby našiel potrebnú implementáciu. Umožňuje polymorfizmus.

    class MyClass {
        func tableMethod() { // Tabuľkový dispatch
            print("Table")
        }
    }
    
    class MySubClass: MyClass {
        override func tableMethod() { // Prepisovaná metóda, tiež používa tabuľku
            print("Table override")
        }
    }
    
  3. Dispatch cez správy (Message Dispatch): Najviac flexibilný, ale aj najpomalší. Používa sa pre objc metódy označené s @objc dynamic. Objective-C systém počas behu hľadá implementáciu metódy podľa jej mena (selektor).

    @objc class MyObjcClass: NSObject {
        @objc dynamic func messageMethod() { // Dispatch cez správy (pre ObjC, dynamický)
            print("Message")
        }
    }
    
Typ dispatchu Rýchlosť Flexibilita (polymorfizmus, dynamizmus) Kde sa používa podľa predvoleného nastavenia
Priamy Rýchly Nízka Štruktúry, final-ty, súkromné
Podľa tabuľky Stredná Stredná Metódy tried
Cez správy Pomalý Vysoká @objc dynamic metódy (Objective-C)