2010-03-20 9 views
2

Aujourd'hui j'ai rencontré quelque chose d'étrange: J'ai essayé de mettre une méthode utilitaire dans une classe utilitaire comme méthode de classe, de sorte que je peux simplement appeler cette méthode pour me générer un UIView pratique (pas la méthode imageNamed mais l'autre, beaucoup plus complexe). C'était horrible. La performance était tellement mauvaise. Ensuite, j'ai créé une méthode d'instance, créé une instance de cette classe et appelé la méthode d'instance. La performance était soudainement géniale. C'est tellement étrange!Est-il généralement plus rapide d'appeler une méthode d'instance plutôt qu'une méthode de classe?

Quelles sont vos expériences avec ce genre de choses?

Répondre

4

Il se passe quelque chose d'autre dans votre cas. Les appels de méthode sont pretty lightweight, et je doute qu'il y ait une différence notable dans les performances entre une méthode de classe et une méthode d'instance. Au moins, je n'ai jamais vu une différence entre les deux dans mon expérience.

Les sources de dégradation des performances n'étant souvent pas ce qu'elles semblent être, je vous recommande d'exécuter votre application contre Instruments ou Shark pour voir où se trouve le goulot d'étranglement dans ce cas. Je suppose que vous allouez de la mémoire dans l'approche de méthode de classe qui n'a pas été allouée dans la méthode d'instance, qui est l'une des opérations les plus coûteuses sur l'iPhone.

+0

En effet, il y avait une légère différence. Je ne l'ai pas vu. Une fois que j'ai utilisé objectWithFooBar et dans l'autre cas, j'ai fait un couple d'initialisation alloc. Mais: Est-ce que le truc objectWithFooBar ne fait pas que l'alloc + init pour moi? Devrait être la même chose: Allouer de la mémoire. En détail, j'ai créé un UIImage. – dontWatchMyProfile

Questions connexes