Я перевірив, що Swift шифрує Іса , і виявив, що він працює лише тоді, коли NSObject - це суперклас (безпосередньо чи далі вгору), або використовуючи прикрасу '@objc'. В іншому випадку він буде дотримуватися статичного та vtable-диспетчерського стилів, як C ++.
Чи нормально визначати клас Swift без базового класу Cocoa / NSObject? Якщо мене це турбує, це означає, що більша частина динамізму об'єктивності-С, наприклад перехоплення методів та самоаналіз часу виконання.
Динамічна поведінка під час роботи лежить в основі таких функцій, як спостерігачі власності, основні дані, орієнтоване на аспекти програмування , обмін повідомленнями вищого порядку , аналітичні та журнальні системи тощо.
Використання стилю виклику методу Objective-C додає близько 20 операндів машинного коду до виклику методу, тому в певних ситуаціях ( багато жорстких дзвінків до методів із невеликими тілами ) статична та віртуальна диспетчеризація стилю C ++ може працювати краще.
Але враховуючи загальне правило 95-5 ( 95% підвищення продуктивності відбувається від настройки 5% коду ), чи не має сенсу починати з потужних динамічних функцій і загартовувати там, де це необхідно?