J'ai testé certaines isa swizzling avec Swift, et j'ai trouvé que cela ne fonctionne que lorsque NSObject est une super-classe (directement ou plus haut), ou en utilisant la décoration '@objc'. Sinon, il suivra un style de distribution statique et vtable, comme C ++.
Est-il normal de définir une classe Swift sans classe de base Cocoa / NSObject? Si cela me préoccupe, cela signifie renoncer à une grande partie du dynamisme d'Objective-C, comme l'interception de méthodes et l'introspection à l'exécution.
Le comportement dynamique à l'exécution est au cœur de fonctionnalités telles que les observateurs de propriétés, les données de base, la programmation orientée aspect , la messagerie d'ordre supérieur , les cadres d'analyse et de journalisation, etc.
L'utilisation du style d'appel de méthode d'Objective-C ajoute environ 20 opérandes de code machine à un appel de méthode, donc dans certaines situations ( beaucoup d'appels serrés à des méthodes avec de petits corps ), la distribution statique et vtable de style C ++ peut être meilleure.
Mais étant donné la règle générale des 95-5 ( 95% des gains de performances proviennent du réglage de 5% du code ), n'est-il pas logique de commencer par les puissantes fonctionnalités dynamiques et de les renforcer si nécessaire?