Ho provato alcuni isa swizzling con Swift e ho scoperto che funziona solo quando NSObject è una superclasse (direttamente o più in alto) o utilizzando la decorazione "@objc". Altrimenti seguirà uno stile di invio statico e vtable, come C ++.
È normale definire una classe Swift senza una classe base Cocoa / NSObject? Se sono preoccupato, questo significa rinunciare a gran parte del dinamismo di Objective-C, come l'intercettazione del metodo e l'introspezione in fase di esecuzione.
Il comportamento dinamico in fase di esecuzione è al centro di funzionalità come osservatori di proprietà, dati di base, programmazione orientata agli aspetti , messaggistica di ordine superiore , framework di analisi e registrazione e così via.
L'uso dello stile di invocazione del metodo di Objective-C aggiunge circa 20 operandi del codice macchina a una chiamata di metodo, quindi in determinate situazioni ( molte chiamate strette a metodi con corpi piccoli ) l'invio statico e vtable in stile C ++ può funzionare meglio.
Ma data la regola generale 95-5 (il 95% dei guadagni in termini di prestazioni proviene dalla messa a punto del 5% del codice ), non ha senso iniziare con le potenti funzionalità dinamiche e rafforzare dove necessario?