Question Comment configurer NSZombieEnabled dans Xcode 4?


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


455
2018-02-03 07:01


origine


Réponses:


Dans Xcode 4.x appuyez sur

R

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

sélectionnez l'onglet "Diagnostics" et cliquez sur "Activer les objets Zombie":

Click "Enable Zombie Objects"

Cela transforme les objets libérés en instances NSZombie qui impriment les avertissements de la console lorsqu'ils sont à nouveau utilisés. Il s'agit d'une aide au débogage qui augmente l'utilisation de la mémoire (aucun objet n'est réellement libéré) mais améliore le rapport d'erreurs.

Un cas typique est lorsque vous libérez un objet et que vous ne savez pas lequel:

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

Ce paramètre Xcode est ignoré lorsque vous archivez l'application pour la soumission App Store. Vous n'avez pas besoin de toucher quoi que ce soit avant de publier votre demande.

Appuyer sur ⌥⌘R revient à sélectionner Produit> Exécuter tout en maintenant la touche Alt enfoncée.
Si vous cochez la case "Activer les objets Zombie", vous ajoutez manuellement "NSZombieEnabled = YES" dans la section "Variables d'environnement" de l'onglet Arguments.


752
2018-02-07 01:55



La réponse de Jano est la meilleure façon de le trouver .. une autre façon serait si vous cliquez sur le schéma déroulant barre -> système d'édition -> arguments onglet, puis ajoutez NSZombieEnabled dans la colonne Variables d'environnement et OUI dans la colonne de valeur ...


70
2018-03-16 14:22



Je trouve cette alternative plus pratique:

  1. Cliquez sur le bouton déroulant "Run Button"
  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 avoir un indice sur le moment où votre objet a été libéré et donc désalloué.

Zombies

Dès qu'un zombie est détecté, vous obtenez une "pile de zombies" qui vous indique quand l'objet en question a été attribué et où il a été conservé ou libéré:

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 de l'onglet de diagnostic des schémas Xcode:

  1. Si vous oubliez de décocher l'option dans l'onglet Diagnostic, aucun objet ne sera libéré de la mémoire.

  2. Vous obtenez une pile plus détaillée qui vous montre dans quelles méthodes votre objet corrompu a été alloué / libéré ou conservé.


57
2018-01-14 15:10



Dans Xcode 4.2

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

5
2018-04-11 07:18



Sur In Xcode 7

<

ou sélectionnez Edit Scheme de Product > Scheme Menu

sélectionner Enable Zombie Objects former le Diagnostics languette

xcode 7 zombie flag

Comme alternative, si vous préférez .xcconfig fichiers, vous pouvez lire cet article https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/


3
2017-08-20 06:50



Cocoa offre une fonctionnalité intéressante qui améliore considérablement vos capacités de débogage de telles situations. C'est une variable d'environnement appelée NSZombieEnabled, regardez ceci vidéo  cela explique la configuration de NSZombieEnabled dans l'objectif-C


1
2017-10-22 04:41



Dans Xcode> 4.3:

Vous cliquez sur la barre de menu déroulant schéma -> schéma d'édition -> onglet arguments, puis ajoutez NSZombieEnabled dans la colonne Variables d'environnement et YES dans la colonne de valeur.

Bonne chance !!!


-1
2017-07-05 06:38