59 votes

Les Instruments d'Allocation suivent les allocations et désallocations d'objets de classes définies par l'utilisateur.

Est-il possible de suivre l'allocation et la désallocation de mes objets Objective-C? Par exemple, si j'ai une classe Book, je veux suivre toutes les allocations et désallocations des objets de type Book. Je peux suivre toutes les classes SKD par défaut, telles que UIViewController, UIWindow, UIView, NSDictionary et tout le reste, mais je veux également suivre les objets créés à partir de mes classes définies.

223voto

rob mayoff Points 124153

Vous pouvez utiliser l'instrument Allocations pour suivre le cycle de vie de vos objets. Si vous utilisez le modèle "Allocations", il est configuré pour enregistrer les événements malloc et free. Vous voudrez peut-être le configurer pour enregistrer également les événements retain, release et autorelease en activant la case à cocher "Enregistrer les comptages de référence" dans les paramètres de l'instrument Allocations :

case à cocher Enregistrer les comptages de référence

(Vous ne pouvez pas basculer cette option pendant l'enregistrement d'Instruments, qui démarre automatiquement dès que vous choisissez votre modèle.)

Mise à jour pour Xcode 9 : Apple a rendu plus difficile de trouver ces paramètres. Vous devez maintenant sélectionner l'instrument Allocations, puis dans la barre de menu choisir Fichier > Options d'enregistrement.

Après votre exécution, vous pouvez trouver vos objets en utilisant l'affichage Allocations > Statistiques > Résumé des objets, qui est le paramètre par défaut pour le volet Détail (la moitié inférieure de la fenêtre) :

Réglage Résumé des objets pour le volet Détail

Si vous souhaitez voir les objets qui ont été désalloués avant l'arrêt de l'exécution, vous devez modifier le paramètre Durée de vie de l'allocation de "Créés et toujours existants" (le paramètre par défaut) à "Tous les objets créés" :

Réglage Durée de vie de l'allocation

Pour trouver des objets d'une classe spécifique, commencez par taper le nom de la classe dans le champ de recherche à l'extrémité droite de la barre d'outils de la fenêtre. Ensuite, trouvez le nom de la classe dans la colonne Catégorie de la vue en liste, survolez-le à la souris et cliquez sur la flèche qui apparaît à côté. Par exemple, mon application a une classe appelée Tile, donc je recherche cela puis clique sur la flèche à côté de Tile dans la vue en liste :

Recherche

Maintenant, la vue en liste affiche chaque instance de Tile. (Remarquez que vous devez entrer la classe réelle de l'objet, pas une superclasse. Entrer NSObject ne trouvera que les objets créés par [NSObject alloc], pas les objets créés par [Tile alloc].) Je peux voir l'historique pour une instance particulière en cliquant sur la flèche à côté de l'adresse de cette instance :

Obtenir des détails

Dans la vue détaillée d'un objet, je peux voir les événements malloc et free et, puisque j'ai activé "Enregistrer les comptages de référence", je peux également voir les messages retain, release et autorelease et leur effet sur le comptage de rétention de l'objet. Si je veux voir la pile d'appels pour l'un de ces événements, je peux ouvrir le panneau détaillé étendu sur le côté droit de la fenêtre :

détail étendu de la pile d'appels

0 votes

Ceci est un article impressionnant. +1 pour les images interactives. Quelle application avez-vous utilisée pour créer ces captures d'écran?

8 votes

J'ai utilisé ScreenFlow pour enregistrer l'écran et éditer la longueur et la taille de chaque vidéo. Ensuite, j'ai utilisé Photoshop pour convertir chaque vidéo en un GIF animé.

2 votes

@robmayoff fabuleux travail, des personnes comme vous aident la communauté iOS à apprendre de plus en plus.

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