3 votes

UITableView reloadData plusieurs fois provoque une fuite de mémoire et ralentit l'application

J'ai fait une erreur en utilisant l'instrument Leaks en pensant que le nombre total d'objets vivants était un octet de mémoire, j'ai donc mis à jour mon message !

[Mis à jour]

Bonjour à tous,

Je suis confronté à un problème :

Mon application présente des données en temps réel en utilisant UITableView qui peut contenir au maximum 34 cellules personnalisées. Lorsque je reçois des données mises à jour, je dois donc recharger les données pour cette UITableView, qui est généralement rechargée 2 à 3 fois par seconde pour mettre à jour 2 à 5 cellules (et en plus, lorsqu'une cellule est mise à jour, j'utilise l'animation UiView pour faire clignoter l'étiquette de texte correspondante).

Au démarrage de l'application, tout va bien, elle fonctionne sans problème, mais au bout de 20 à 30 minutes, elle ralentit et se bloque parfois dans la seconde. J'ai utilisé l'instrument Leaks pour tester mon application et j'ai vu qu'après le démarrage, elle utilisait environ 17Mb de mémoire, mais qu'après le démarrage de l'application, elle n'utilisait pas de mémoire. 20-30 minutes , il utilise 25k-28k objet vivant (1,7Mb de mémoire) Lorsque j'ai essayé de naviguer sur tous les écrans, cela a utilisé jusqu'à 80K objets vivants (6.5Mb de mémoire) :(

Je suppose que l'UITableView est rechargé de nombreuses fois, ce qui fait que mon application utilise de plus en plus de mémoire au fil du temps et qu'elle s'exécute lentement.

Si quelqu'un sait comment résoudre ce problème, qu'il m'aide, merci beaucoup !

4voto

Marcelo Cantos Points 91211

Pourriez-vous utiliser reloadRowsAtIndexPaths:withRowAnimation: à la place ?

2voto

Benoît Points 5598

Corriger la fuite de mémoire au lieu de la contourner...

À chaque réception de données, vous ne devez pas libérer toutes les données qui augmentent la taille de votre mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X