Eu testei alguns isa swizzling com Swift e descobri que só funciona quando NSObject é uma superclasse (diretamente ou mais acima), ou usando a decoração '@objc'. Caso contrário, ele seguirá um estilo de envio estático e vtable, como C ++.
É normal definir uma classe Swift sem uma classe base Cocoa / NSObject? Se estou preocupado, isso significa renunciar a muito do dinamismo do Objective-C, como a interceptação de método e a introspecção em tempo de execução.
O comportamento dinâmico em tempo de execução está no centro de recursos como observadores de propriedade, dados centrais, programação orientada a aspectos , mensagens de ordem superior , estruturas analíticas e de registro e assim por diante.
Usar o estilo de invocação de método de Objective-C adiciona cerca de 20 operandos de código de máquina a uma chamada de método, portanto, em certas situações ( muitas chamadas apertadas para métodos com corpos pequenos ), o despacho estático e vtable do estilo C ++ pode ter um desempenho melhor.
Mas dada a regra geral 95-5 ( 95% dos ganhos de desempenho vêm do ajuste de 5% do código ), não faz sentido começar com os poderosos recursos dinâmicos e endurecer quando necessário?