Adam a fait un excellent travail en expliquant ce que sont les zombies, mais l'utilisation de la variable d'environnement n'est pas la meilleure façon de les trouver et de les suivre.
Une bien meilleure approche de la détection des zombies consiste à utiliser des instruments - à partir de XCode, commencez par "Run with Instrument" et choisissez "Allocations".
Ensuite, arrêtez l'enregistrement juste après son démarrage, appuyez sur le bouton "i" de l'instrument Allocations, et activez "enable reference counts" et "Enable NSZombie Detection". Maintenant, appuyez à nouveau sur le bouton Enregistrer dans l'instrument, et votre application démarrera - si des objets zombies sont envoyés, l'enregistrement s'arrêtera, et une boîte de dialogue apparaîtra dans la ligne de temps de l'enregistrement - vous pouvez cliquer dessus pour trouver chaque endroit où un objet a été retenu ou relâché.
Edit : Les conseils précédents étaient pour XCode 3, voici un complément pour XCode 4 :
Dans XCode 4.2 mais il existe un mécanisme encore plus simple pour utiliser la détection des zombies : l'instrument zombie. Au lieu de "Run" pour démarrer l'application, utilisez "Profile" et un sélecteur d'instrument apparaîtra. Sélectionnez "Zombie", et l'application commencera à fonctionner - faites ce qui provoque votre crash, et un dialogue apparaîtra disant "Zombie Messaged".
De là, cliquez sur la petite flèche dans la boîte de dialogue. Vous obtiendrez une liste de toutes les fois où l'objet zombie a été créé, conservé ou libéré. Tirez la barre latérale et vous pouvez aller à chaque entrée, en regardant la trace de la pile pour le code qui était responsable de chaque ajustement dans le compte de retenue.
19 votes
Un NSObject mort-vivant - attention !
6 votes
Un objet NSO mort-vivant.