Mi a vezérlés szerkezete?
sobes.tech MI
Válasz az MI-től
Swiftben három fő módszer-diszpécser típus létezik:
-
Közvetlen diszpécserezés (Direct Dispatch): A leggyorsabb. A fordító pontosan tudja, melyik módszert kell hívni futás közben. Alapértelmezés szerint struktúrák, final-klasszok, privát módszerek esetén.
struct MyStruct { func directMethod() { // Közvetlen diszpécserezés print("Direct") } } -
Táblázatos diszpécserezés (Table Dispatch): Osztálymódszerekhez (nem final). Minden osztálynak van egy virtuális módszertábla (vtable), ahol minden módszerhez egyedi index tartozik. A fordító futás közben hozzáfér a vtable-hez, hogy megtalálja a szükséges implementációt. Polimorfizmust tesz lehetővé.
class MyClass { func tableMethod() { // Táblázatos diszpécserezés print("Table") } } class MySubClass: MyClass { override func tableMethod() { // Felülírt módszer, szintén a táblát használja print("Table override") } } -
Üzenet alapú diszpécserezés (Message Dispatch): A legkifinomultabb, de a leglassabb. Az
@objc dynamic-del jelölt objc módszerekhez használják. Az Objective-C rendszer futás közben a módszer nevét (szeletort) keresi.@objc class MyObjcClass: NSObject { @objc dynamic func messageMethod() { // Üzenet alapú diszpécserezés (ObjC, dinamikus) print("Message") } }
| Diszpécser típus | Sebesség | Rugalmasság (polimorfizmus, dinamikus viselkedés) | Alapértelmezett alkalmazási hely |
|---|---|---|---|
| Közvetlen | Gyors | Alacsony | Struktúrák, final-klasszok/metódusok, privát |
| Táblázatos | Közepes | Közepes | Osztálymódszerek |
| Üzenet alapú | Lassú | Magas | @objc dynamic módszerek (Objective-C) |