#iOSКомпас 🧭
7️⃣1️⃣ Завдання 71
Які види диспетчеризації існують у Swift?Давно не бачились пасажири. З вами на зв'язку помічник капітана Сергій з @badlinkschannel.
🤔 У Swift існує кілька видів диспетчеризації, які визначають, як і коли викликаються методи або функції. Основні види диспетчеризації включають:
1️⃣ Статична диспетчеризація (
Static Dispatch)
Виклик функції або методу визначається на етапі компіляції. Використовується для структур, перерахувань і final класів.
struct MyStruct {
func printMessage() {
print("Hello from MyStruct")
}
}
let instance = MyStruct()
instance.printMessage() // Виклик визначається на етапі компіляції
2️⃣ Диспетчеризація за таблицею віртуальних функцій (
Vtable Dispatch)
Використовується для виклику методів класу, які можуть бути перевизначені в підкласах. Віртуальна таблиця (
vtable
) визначає, який метод викликати.
class BaseClass {
func printMessage() {
print("Hello from BaseClass")
}
}
class SubClass: BaseClass {
override func printMessage() {
print("Hello from SubClass")
}
}
let instance: BaseClass = SubClass()
instance.printMessage() // Виклик визначається в runtime за допомогою vtable
3️⃣ Диспетчеризація за свідком (
Witness Table Dispatch)
Використовується для виклику методів протоколів, реалізованих типами.
protocol MyProtocol {
func printMessage()
}
struct MyStruct: MyProtocol {
func printMessage() {
print("Hello from MyStruct")
}
}
let instance: MyProtocol = MyStruct()
instance.printMessage() // Виклик визначається в runtime за допомогою witness table
4️⃣ Динамічна диспетчеризація (
Dynamic Dispatch)
Використовується для методів, позначених як dynamic, або методів Objective-C. Метод визначається в runtime за допомогою Objective-C runtime.
import Foundation
class MyClass: NSObject {
@objc dynamic func printMessage() {
print("Hello from MyClass")
}
}
let instance = MyClass()
instance.printMessage() // Виклик визначається в runtime за допомогою Objective-C runtime
#️⃣ У Swift існують різні види диспетчеризації: статична, диспетчеризація за таблицею віртуальних функцій, диспетчеризація за свідком і динамічна диспетчеризація. Кожен вид використовується в залежності від структури та вимог коду.
@Zatishna_Galera