Probé un poco de isa swizzling con Swift, y descubrí que solo funciona cuando NSObject es una superclase (directamente o más arriba), o usando la decoración '@objc'. De lo contrario, seguirá un estilo de envío estático y vtable, como C ++.
¿Es normal definir una clase Swift sin una clase base Cocoa / NSObject? Si me preocupa, esto significa renunciar a gran parte del dinamismo de Objective-C, como la interceptación de métodos y la introspección en tiempo de ejecución.
El comportamiento dinámico en tiempo de ejecución se encuentra en el corazón de funciones como los observadores de propiedades, los datos centrales, la programación orientada a aspectos , la mensajería de orden superior , los marcos analíticos y de registro, etc.
El uso del estilo de invocación de métodos de Objective-C agrega alrededor de 20 operandos de código de máquina a una llamada de método, por lo que en ciertas situaciones ( muchas llamadas ajustadas a métodos con cuerpos pequeños ) el envío estático y vtable de estilo C ++ puede funcionar mejor.
Pero dada la regla general 95-5 (el 95% de las ganancias de rendimiento provienen de ajustar el 5% del código ), ¿no tiene sentido comenzar con las potentes funciones dinámicas y endurecerlas cuando sea necesario?