Middle
Aká je štruktúra riadenia?
sobes.tech AI
Odpoveď od AI
V Swiftu existujú tri hlavné typy dispatchu metód:
-
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") } } -
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") } } -
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) |