Xcode: Gestion de la fuite mémoire

mercredi 7 août 2013

Je vais vous faire part de mon expérience concernant des tests sur la gestion des fuites mémoires.
Dans Xcode, il existe un ensemble de programmes qui peuvent être utilisé pour améliorer les performances de votre application après sa réalisation. Ces outils vous permettront d’améliorer des algorithmes pour diminuer le temps d’exécution ou encore de gérer les fuites mémoires.
C’est de ce dernier point que je vais discuter, car j’ai été confronté a un problème de redémarrage du device après une très longue utilisation de mon application.
Le tout bien évidemment est de savoir si c’est votre application qui pose soucis?
Pour ma part, j’ai identifié que c’était dû probablement à une fuite mémoire.

Il faut savoir qu’il existe deux types de fuite mémoire:

  • Un objet n’a pas été libérée et n’est plus référencé.
  • Un objet continue a être utilisée et donc alloue de la mémoire et qu’on ne libère jamais. Dans ce cas, nous avons la mémoire qui grimpe sans jamais redescendre.
Pour localiser ces problèmes de mémoires, nous avons deux instruments à notre disposition. Pour le premier cas l’instrument Leaks, et le second Allocations.

Pour contrôler son application avec l’un de ces instruments, il suffit d’exécuter le programme en mode profile (Pomme + i) et de choisir l’instrument qu’on veut utiliser.

Pour Allocations, il suffit de cliquer sur rec, de faire une certaine manipulation bien précise qu’on fera une dizaine de fois et entre chaque manipulation identique, il faut cliquer à gauche sur Mark Heap. Après avoir répéter une dizaine de fois la manipulation, on analyse le graphe et les chiffres au niveau du Heap Growth. Si on obtient un graphe qui augmente toujours sans redescendre, c’est qu’on a un soucis et qu’on a des risques que la mémoire explose et fasse redémarrer le device en question.

Voici un exemple de graphe avec une fuite mémoire:

bad_memory_allocations

Pour Leaks, c’est le même programme que Allocations, il faut juste sélectionné Leaks à gauche, il est possible aussi de définir le temps des frames à comparer, et ensuite de cliquer sur le bouton rec. Il nous affichera sous le graphe, si il a détecter des fuites mémoires, durant tout le temps de nos tests sur le device ou simulateur.

Pour cet article je me suis basé sur ce tutoriel.

Tags: Allocations , Instuments , Leaks , mémoire