1

J'ai deux étiquettes que j'utilise comme HUD pour le lecteur pendant une partie. Je mets à jour ces étiquettes fréquemment, de sorte que le joueur dispose d'informations à jour. Le problème est que j'ai utiliséModification de UILabel pendant l'exécution, gestion de la mémoire pour changer de chaîne

uiLabel.text = [NSString stringWithFormat:@"%3.0f", value]; 

pour passer la nouvelle valeur que l'étiquette devrait avoir. J'ai remarqué, cependant, que j'ai quelque chose d'une fuite de mémoire douce ici. Comme je fais cette mise à jour plusieurs fois par seconde et que cela crée une chaîne qui est définie sur autorelease, je finis par prendre plus de mémoire que nécessaire. Et le garder, car la vue ne va pas disparaître.

J'ai aussi essayé alloc et libérer des chaînes explicitement, telles que:

NSString* value = [[NSString alloc] initWithFormat: @"%3.0f", value]; 
uiLabel.text = value; 
[value release]; 

Cependant, je trouve que cela semble faire la même chose, mais plus rapide, mais je ne sais pas pourquoi. Dans cette situation, j'aurais pensé qu'il ne devrait jamais y avoir de chaînes qui attendent d'être libérées du tout, puisque je les rejette si explicitement.

Quelqu'un peut-il voir ce que je suis en train de faire ici que je ne vois manifestement pas? Y a-t-il une meilleure façon de gérer cela? Quelques recherches superficielles ne m'ont pas beaucoup apporté.

Répondre

2

Vous ne faites rien d'extraordinaire. Même avec:

uiLabel.text = [NSString stringWithFormat:@"%3.0f", value]; 

la piscine autorelease se drainée chaque fois que votre code retourne le contrôle à la boucle d'exécution (donc au moins aussi souvent que vous voyez la mise à jour de l'interface utilisateur). Si vous voyez des allocations de mémoire croissantes, vous devriez chercher ailleurs.

+0

J'ai commenté ces appels (l'actualisation complète du HUD, qui constitue actuellement seulement trois de ces appels) et les chaînes ont cessé de gagner. - L'exécution de l'application pendant ~ 5 minutes va me gagner un bon peu. Je serais heureux de joindre une capture d'écran, si cela est possible sur stackoverflow (je suis assez nouveau pour poster). S'il y a une sorte d'information que je peux fournir pour aider, faites le moi savoir. – Kevek

+0

J'ai fait plus de tests de profilage, je crois que votre réponse devrait avoir un sens, mais ce n'est certainement pas ce que je vois. – Kevek