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 методдору үчүн колдонулат. Objective-C системасы ишке ашырылуу учурунда методдун аталышы (селектору) боюнча издейт.

    @objc class MyObjcClass: NSObject {
        @objc dynamic func messageMethod() { // Хабарламалар аркылуу жеткирүү (Objective-C, динамикалык)
            print("Message")
        }
    }
    
Жеткирүү түрү Жылдамдыгы Ийкемдүүлүк (полиформизм, динамикалык) Калыптанган колдонуу жерлери
Түз Жылдам Төмөнкү деңгээл Структуралар, final-класстар/методдор, жеке
Тизмеге негизделген Ортача Ортача Класстардын методдору
Хабарламалар аркылуу Асыраак Жогорку @objc dynamic методдору (Objective-C)