Sobes.tech
Middle

მართვის სტრუქტურა რა არის?

sobes.tech AI

პასუხი AI-სგან

Swift-ში არსებობს სამი ძირითადი მეთოდის დისპეტჩერის ტიპი:

  1. მხოლოდ პირდაპირი დისპეტჩერი (Direct Dispatch): ყველაზე სწრაფი. კომპილატორი ზუსტად იცის, რომელი მეთოდი უნდა გამოიძახოს. გამოიყენება ჩვეულებრივ სტრუქტურებისთვის, final-კლასებისთვის, პირად მეთოდებისთვის.

    struct MyStruct {
        func directMethod() { // პირდაპირი დისპეტჩერი
            print("Direct")
        }
    }
    
  2. ცხრილის დისპეტჩერი (Table Dispatch): გამოიყენება კლასების მეთოდებისთვის (არ არის final). თითოეულ კლასს აქვს ვირტუალური მეთოდების ცხრილი (vtable), სადაც თითოეულ მეთოდს აქვს უნიკალური ინდექსი. კომპილატორი მიმართავს vtable-ს შესრულების დროს, რათა იპოვოს საჭირო მეთოდი. უზრუნველყოფს პოლიმორფიზმს.

    class MyClass {
        func tableMethod() { // ცხრილის დისპეტჩერი
            print("Table")
        }
    }
    
    class MySubClass: MyClass {
        override func tableMethod() { // გადაფარვა, ასევე იყენებს ცხრილს
            print("Table override")
        }
    }
    
  3. შეტყობინებებით დისპეტჩერი (Message Dispatch): ყველაზე მოქნილი, მაგრამ ყველაზე ნელი. გამოიყენება @objc dynamic ნიშნულით აღნიშნულ objc მეთოდებზე. ობიექტივ-ც სისტემაში შესრულების დროს მეთოდის რეალიზაცია ეძებს მისი სახელით (სელექტორით).

    @objc class MyObjcClass: NSObject {
        @objc dynamic func messageMethod() { // შეტყობინებებით დისპეტჩერი
            print("Message")
        }
    }
    
დისპეტჩერის ტიპი სიჩქარე მოქნილობა (პოლიმორფიზმი, დინამიზმი) სადაც გამოიყენება ძირითადად
პირდაპირი სწრაფი დაბალი სტრუქტურები, final-კლასები/მეთოდები, პირადი
ცხრილის მიხედვით საშუალო საშუალო კლასების მეთოდები
შეტყობინებებით ნელი მაღალი @objc dynamic მეთოდები (Objective-C)