Question

Dans le développement iPhone, la vitesse est de l'essence. Ne sait quiconque s'il y a une différence de vitesse entre l'utilisation d'un type CoreFoundation (comme CFMutableDictionaryRef) par rapport à un type Foundation (son homologue, NSMutableDictionary).

Je pense manipulait le type CF serait plus rapide car il n'a pas à jeter autour des messages d'exécution ObjC, est-ce une hypothèse sans fondement, quelqu'un at-il réellement regardé pour cela?

Était-ce utile?

La solution

Dans un sens technique, oui, il est plus rapide, exactement pour cette raison.

Dans un sens pratique, non, ce n'est pas plus rapide. D'une part, la différence de vitesse est petit . Nous parlons millisecondes enregistrées pendant la durée de l'ensemble du processus.

Les économies pourrait être plus grand sur l'iPhone, mais il est encore à peu près le plus petit gain de vitesse que vous pouvez obtenir. Votre temps est beaucoup mieux dépensé profiler votre application dans les instruments et aller où il vous dit et table à repasser les points chauds dans votre propre code.

Et c'est là la Fondation devient plus rapide. Votre temps

Le code qui utilise la fonction autorelease de la Fondation chaque fois que possible, vous permet d'économiser beaucoup de temps et des maux de tête en évitant les fuites de mémoire facilement évitables (à savoir, en oubliant d'écrire ou de ne pas atteindre les messages de release). CF ne pas autorelease, vous devez vous rappeler explicitement CFRelease tout ce que vous créez ou copiez avec elle et quand vous oubliez ou ne parviennent pas à atteindre ce code (et je ne veux quand parler -I de l'expérience ), vous passerez beaucoup plus de temps à chasser sur la fuite de mémoire. L'analyseur statique aide, mais il ne sera jamais en mesure de tout attraper.

(Vous techniquement peut objets autorelease des FC, mais le code de le faire est terriblement laid et vous n'édulcorer votre gain de vitesse déjà minuscule.)

Alors, bâton à la Fondation le plus possible. Ne pas aller trop loin avec le autorelease; même dans le plus pur cacao, il y a encore des moments où explicitement la libération des objets est justifiée (principalement des boucles serrées), et cela va double pour Cocoa Touch (depuis iOS va tuer votre application si vous allouez trop de mémoire, de sorte que vous aurez envie de libérer grand des objets comme des images le plus rapidement possible). Mais en général, autorelease vous permet d'économiser beaucoup plus de temps que CF sera jamais sauver vos utilisateurs.

La raison liée à la non-temps est que le code Objective-C, avec des noms d'argument (à partir du sélecteur de message) mélangés avec des valeurs, est beaucoup plus facile à lire que le code sur la base de la fonction-C. Cela peut ne pas faire votre travail aller plus vite, mais il est certainement plus amusant.

Autres conseils

L'écriture de code dans les fonctions des FC apportera en effet un gain de performances à votre application, mais il y a une autre meilleure approche pour améliorer la performance: l'écriture directement serait assemblée apporter encore plus d'avantages de performance (bien que ce soit une approche extrême)

constructions de langage de haut niveau sont préférables à ceux de bas niveau pour au moins les raisons Peter Hosey mentionnées. Pour cela, nous pouvons ajouter l'optimisation prématurée qui peut facilement conduire à l'échec du projet, en tant que développeur est plus préoccupé par les aspects non-fonctionnels de l'application au lieu de ceux fonctionnels.

Si, après que vous ayez une application totalement fonctionnelle, vous sentez que certaines parties du code ont les goulots d'étranglement, vous pouvez essayer d'optimiser ceux-ci, en les réécrivant des constructions de langage de bas niveau. Vous aurez au moins un point de comparaison avec le code actuel, pour vous assurer que le code de bas niveau se comporte comme prévu (soit des tests manuels ou de l'unité fera l'affaire ici).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top