Vous pouvez déclarer des fonctions comme des inlines comme celle-ci: de sorte que lorsque vous n'êtes pas en débogage, il n'y a aucun coût à la fonction, car il est optimisé et en ligne. Et si vous voulez avoir la même chose, mais pour une méthode de classe? P> Ma classe est déclarée comme ceci: p> je veux convertir '< Code> DPRINTF CODE> 'dans quelque chose de similaire au mais je ne peux pas faire ceci: p> Comment puis-je avoir une méthode statique à coûts zéro d'une classe désactivée pour les compilations non débogues ? p> p> en ligne code> afin qu'il n'y ait aucun coût pour invoquer la méthode. p>
3 Réponses :
Soyez prudent. Les méthodes Objective-C ne sont pas les mêmes que les fonctions C. Un procédé de l'objectif-c est traduit par le compilateur dans le objc_msgsend () code> Appel de fonction; Vous n'avez pas de contrôle si une méthode est en ligne ou non parce que cela n'est pas pertinent. Vous pouvez en savoir plus sur l'exécution de l'objectif-C ici (Guide de programmation d'exécution de l'objectif-C) , ici (Référence d'exécution de l'objectif-C) et ici (cocoasamurai post) et une recherche rapide de Google devrait faire apparaître plus d'informations. P>
Aussi, méfiez-vous une optimisation prématurée. Un marquage en ligne sur une fonction d'impression n'est pas susceptible d'économiser beaucoup de temps, même si la fonction est appelée beaucoup. L'inlinisation n'ayant généralement aucun sens où le rendement est très facile à calculer, de sorte que la fonction d'appel de fonction est significative. Rien n'impliquant aucune variation de PrintF est facile en termes de nombre d'instructions appelées.
Outre le fait qu'aujourd'hui, la plupart des compilateurs modernes (GCC ou Scrang) savent généralement comment reconnaître les fonctions qui fonctionnent bien en ligne et les marqueront comme elles-mêmes. Les humains sont notoirement mauvais à l'estimation de quelles fonctions fonctionnent bien en ligne, il est donc recommandé de laisser cela seul pour le compilateur à comprendre (j'ai entendu parler de certains compilateurs C qui n'ignorera même pas que vous marquiez des fonctions comme inline ou non, alors soyez méfiant).
Il n'y a pas de méthode statique dans l'objectif-c. Il n'y a que des méthodes de classe, qui sont comme des méthodes d'instance, sauf qu'ils appartiennent à une classe. Cela signifie que, comme des méthodes d'instance, un message envoyé à une classe doit passer via les machines d'expédition de message pour déterminer la méthode correcte à appeler, ce qui se fait à l'exécution. Vous pouvez aligner l'appel à la machine de répartition de la méthode, mais le corps de la méthode ne peut toujours pas être inlincé sans un niveau d'optimisation folle qui n'existe pas dans un compilateur de l'objectif-C pour le moment. P>
En tout cas, il s'agit d'une micro-optimisation. Si le profilage le montre nécessaire (ce qui ne sera jamais jamais), vous pouvez suivre la gymnastique. Sinon, souciez des problèmes de performance réels dans votre application. P>
Pour ceux qui (comme moi) provenant d'un arrière-plan Java où les méthodes de classe et les méthodes statiques sont synonymes, notez que dans les méthodes de classe Objective-C est résolue de manière dynamique - fonctionnant sur des objets de classe, c'est pourquoi ils ne sont pas "statiques". en.wikipedia.org/wiki/Method_(Computer_programming)
Vous pouvez y accomplir avec des blocs p> Apple documente même ce ici ( Archive A>) Donc, ce n'est pas une méthode privée autant d'en ligne semble croire. p> profiter! p> h1>