Sobes.tech
Middle

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:

  1. 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")
        }
    }
    
  2. 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")
        }
    }
    
  3. Ü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)