Question

J'ai un NSTimer qui se déclenche toutes les secondes, et sur cette seconde, je mets à jour un UILabel en définissant la propriété text comme suit:

remainglbl.text = [NSString stringWithFormat:@"%i:%02i", var1, var2];   

Cela fonctionne bien, mais lorsque je l’exécute dans xcode avec Démarrer avec Performance Tool - > Fuites, il semble que la mémoire ne cesse de grimper, de grimper et de grimper.

De ma compréhension, la chaîne devrait être libérée automatiquement (même si je ne vois jamais la mémoire diminuer ou cesser d’augmenter).

Est-ce une fuite de mémoire? Existe-t-il un meilleur moyen de contrôler ma consommation de mémoire?

Merci!

Mise à jour: le code pour créer le minuteur est le suivant:

timeTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(changeTime:) userInfo:nil repeats:YES];  
Le code à nettoyer à la fin du minuteur est le suivant:

[timeTimer invalidate];
[timeTimer release];
timeTimer = nil;

Quelque chose ne va pas avec ça? Je pensais que la mémoire pourrait être libérée une fois le chronomètre terminé, mais ce n’est pas le cas.

Était-ce utile?

La solution

Je pense que le problème était que je n'avais pas compris les outils de performance. L'exécution avec le moniteur d'activité n'indique pas une utilisation croissante de la mémoire.

Autres conseils

Juste par curiosité, le problème persiste-t-il si vous utilisez [endingLbl setText:] au lieu de définir la propriété? Votre code a l'air bien ... la mémoire doit être nettoyée car stringWithFormat libère automatiquement la chaîne.

Une autre chose à essayer: lorsque vous créez des threads dans Objective-C, vous devez envelopper tout le code dans un NSAutoreleasePool afin que les éléments que vous créez lors de l'exécution du thread soient nettoyés. Cela ne devrait pas faire de différence ici, il en faudrait déjà une, mais cela en vaut la peine.

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