Middle
Jaká je struktura řízení?
sobes.tech AI
Odpověď od AI
V Swiftu existují tři hlavní typy dispatche metod:
-
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") } } -
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") } } -
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) |