Comment le moteur d’exécution Objective-C instancie-t-il la métaclasse racine et les autres descriptions de classe?

J’essaie d’implémenter un environnement d’exécution de base ANSI C orienté object et d’utiliser Objective-C comme guide.

Ils semblent être en trois parties. Une description de classe, une interface de classe et une implémentation de classe. Pour que l’interface de classe soit instanciée, la méthode habituelle consistant à utiliser l’object Class pour instancier son object ne peut être utilisée que si le moteur d’exécution a déjà instancié votre object de classe à l’aide de la description de la classe.

Toutes les définitions de classe sont-elles donc allouées de manière statique à la première exécution pour permettre l’instanciation à l’aide de l’object de classe? Ou si elles sont allouées dynamicment (lors de l’appel initial), comment? Cela fait-il partie de la boucle d’exécution ou la classe est-elle réellement une fonction qui détermine si elle a déjà été allouée ou non avant le transfert du message?

    Le runtime effectue une initialisation via des fonctions de constructeur qui sont appelées avant l’exécution réelle du programme. Ils vont par __atsortingbute__((constructor)) dans gcc et clang.

    Dans le cas d’Objective-C, certains d’entre eux sont incorporés dans le binary par le compilateur. Vous devrez les inclure dans vos en-têtes pour obtenir un effet similaire.

    Ces fonctions utilisent des données automatiquement intégrées par le compilateur. Ils font des choses telles que la construction de tables de hachage pour la fonction de recherche de classe, qui sont ensuite utilisées pour le passage du message.

    Les instances d’autre part sont allouées dynamicment.

    Je fais quelque chose de similaire, donc je ne sais pas vraiment mieux que ça, mais c’est aussi profond que j’ai creusé.