457 votes

Comment configurer NSZombieEnabled dans Xcode 4?

Comment puis-je configurer NSZombieEnabled et CFZombieLevel pour mon exécutable dans Xcode 4?

752voto

Jano Points 37593

Dans Xcode 4.x appuyez sur

R

(ou cliquez sur Menubar > Product > Scheme > Edit Scheme)

sélectionnez le "Diagnostic" de l'onglet et cliquez sur "Activer Zombie Objets":

Click "Enable Zombie Objects"

Ceci permet d'objets publiés dans NSZombie instances d'impression de la console d'avertissements lorsque les utiliser de nouveau. C'est un débogage aide qui augmente l'utilisation de la mémoire (aucun objet n'est vraiment sorti) mais améliore le rapport d'erreurs.

Un cas typique est lorsque vous relâchez un objet et vous ne savez pas lequel:

  • Avec des zombies: -[UITableView release]: message sent to deallocated instance
  • Sans zombies: EXC_BAD_ACCESS

Cette Xcode paramètre est ignoré lorsque vous archivez l'application de l'App Store de soumission. Vous n'avez pas besoin de toucher à rien avant de publier votre application.

Sur ⌥⌘R est la même que la sélection du Produit > Exécuter tout en gardant la touche Alt enfoncée.
En cliquant sur "Activer Zombie Objets" case à cocher est le même que l'ajout manuel d' "NSZombieEnabled = OUI" dans la section "Variables d'Environnement" de l'onglet Arguments.

70voto

learner2010 Points 1916

La réponse de Jano est la façon la plus facile de la trouver. Si vous cliquez sur la barre déroulante du schéma -> edit scheme -> arguments, ajoutez NSZombieEnabled dans la colonne Environment Variables et YES dans la colonne value ...

57voto

Besi Points 9452

Je trouve cette solution plus pratique:

  1. Cliquez sur le "Bouton Exécuter de la liste Déroulante"
  2. Dans la liste choisissez Profile
  3. Le programme "Instruments" devrait s'ouvrir où vous pouvez également choisir Zombies
  4. Maintenant, vous pouvez interagir avec votre application et essayer de provoquer l'erreur
  5. Dès que l'erreur se produit, vous devriez obtenir un indice sur lorsque votre objet a été libéré et donc libéré.

Zombies

Dès qu'un zombie est détecté, vous obtenez alors un pur "Zombie Pile" qui vous indique quand l'objet en question a été affecté et où il a été retenu ou sortie:

Event Type    RefCt     Responsible Caller
Malloc            1     -[MyViewController loadData:]
Retain            2     -[MyDataManager initWithBaseURL:]
Release           1     -[MyDataManager initWithBaseURL:]
Release           0     -[MyViewController loadData:]
Zombie           -1     -[MyService prepareURLReuqest]

Avantages par rapport à l'utilisation du diagnostic de l'onglet Xcode Régimes:

  1. Si vous avez oublié de décocher l'option dans le diagnostic de l'onglet il y a pas d'objets sera libéré de la mémoire.

  2. Vous obtenez une vue plus détaillée de pile qui vous montre quelles sont les méthodes de votre corrompus objet a été alloué / publié ou conservés.

5voto

pratap shaik Points 105

Dans Xcode 4.2

  • Nom du projet / Edit Scheme / Diagnostics /
  • Activer la case à cocher Objets zombies
  • Vous avez terminé

1voto

user2554822 Points 92

Cocoa offre une fonctionnalité intéressante qui améliore considérablement vos capacités à déboguer de telles situations. C'est une variable d'environnement qui s'appelle NSZombieEnabled, regardez cette vidéo qui explique comment configurer NSZombieEnabled dans l'objectif-C

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