pourquoi les méthodes des classes + load() ont été invoquées avant la fonction principale du projet? Est-ce que la fonction principale n'est pas l'entrée de l'application? qui a invoqué les méthodes + load?Pourquoi une classe + load() a-t-elle été exécutée avant main() dans Objc?
Répondre
De: NSObject +load and +initialize - What do they do?
Le moteur d'exécution envoie le message de charge à chaque objet de classe, très peu de temps après l'objet de classe est chargé dans l'espace d'adressage du processus. Pour les classes qui font partie du fichier exécutable du programme, le moteur d'exécution envoie le message de chargement très tôt dans la vie du processus.
tout d'abord: Il est +load
, pas load()
(+load()
n'existe pas syntaxiquement), car il est une méthode, pas une fonction.
main()
est le point d'entrée d'une application. load
est envoyé à partir de l'environnement d'exécution, ce qui commence évidemment avant que l'application est "démarrée" en appelant main()
.
En réalité, tous les objets de classe d'un ensemble reçoivent un message load
après le chargement de l'ensemble. Évidemment, c'est plus facile que d'avoir un drapeau pour chaque classe, si elle a déjà reçu le message.
Cependant, cela ne devrait pas poser de problème pour votre code, car l'implémentation +load
ne doit pas s'appuyer sur quelque chose en dehors de la classe.