Sobes.tech
Middle

Jaká je struktura řízení?

sobes.tech AI

Odpověď od AI

V Swiftu existují tři hlavní typy dispatche metod:

  1. Přímý dispatch (Direct Dispatch): Nejrychlejší. Kompilátor přesně ví, kterou metodu zavolat při kompilaci. Výchozí pro struktury, třídy s final metodami, soukromé metody.

    struct MyStruct {
        func directMethod() { // Přímý dispatch
            print("Direct")
        }
    }
    
  2. Tabulkový dispatch (Table Dispatch): Používá se pro metody tříd (ne final). Každá třída má tabulku virtuálních metod (vtable), kde každá metoda má unikátní index. Kompilátor přistupuje k vtable při běhu, aby našel potřebnou implementaci. Umožňuje polymorfismus.

    class MyClass {
        func tableMethod() { // Tabulkový dispatch
            print("Table")
        }
    }
    
    class MySubClass: MyClass {
        override func tableMethod() { // Přepsaná metoda, také používá tabulku
            print("Table override")
        }
    }
    
  3. Zprávový dispatch (Message Dispatch): Nejvíce flexibilní, ale také nejpomalejší. Používá se pro objc metody označené @objc dynamic. Objective-C systém při běhu hledá implementaci metody podle jejího jména (selektor).

    @objc class MyObjcClass: NSObject {
        @objc dynamic func messageMethod() { // Zprávový dispatch (pro ObjC, dynamický)
            print("Message")
        }
    }
    
Typ dispatche Rychlost Flexibilita (polymorfismus, dynamika) Kde se používá podle výchozího nastavení
Přímý Rychlý Nízká Struktury, final třídy/metody, soukromé
Tabulkový Střední Střední Třídy metod
Zprávový Pomalejší Vysoká @objc dynamic metody (Objective-C)