461 Stimmen

Wie kann ich NSZombieEnabled in Xcode 4 einrichten?

Wie richte ich ein NSZombieEnabled y CFZombieLevel für meine ausführbare Datei in Xcode 4?

753voto

Jano Punkte 61585

In Xcode 4.x drücken Sie

R

(oder klicken Sie Menubar > Product > Scheme > Edit Scheme )

Wählen Sie die Registerkarte "Diagnose" und klicken Sie auf "Zombie-Objekte aktivieren":

Click "Enable Zombie Objects"

Dadurch werden freigegebene Objekte zu NSZombie-Instanzen, die bei erneuter Verwendung Konsolenwarnungen ausgeben. Dies ist eine Debugging-Hilfe, die den Speicherverbrauch erhöht (kein Objekt wird wirklich freigegeben), aber die Fehlerberichterstattung verbessert.

Ein typischer Fall ist, wenn Sie ein Objekt zu viel freigeben und nicht wissen, welches:

  • Mit Zombies: -[UITableView release]: message sent to deallocated instance
  • Ohne Zombies: EXC_BAD_ACCESS

Diese Xcode-Einstellung wird ignoriert, wenn Sie die Anwendung für die Einreichung im App Store archivieren. Sie brauchen nichts zu ändern, bevor Sie Ihre Anwendung freigeben.

Drücken Sie R ist dasselbe wie die Auswahl von Produkt > Ausführen unter Beibehaltung der Option Alt Taste gedrückt.
Das Anklicken des Kontrollkästchens "Zombie-Objekte aktivieren" ist dasselbe wie das manuelle Hinzufügen von "NSZombieEnabled = YES" im Abschnitt "Umgebungsvariablen" der Registerkarte Argumente.

70voto

learner2010 Punkte 4137

Jano's Antwort ist der einfachste Weg, um es zu finden. eine andere Möglichkeit wäre, wenn Sie auf das Schema Dropdown-Leiste klicken -> bearbeiten Schema -> Argumente Registerkarte und fügen Sie dann NSZombieEnabled in der Spalte Umgebungsvariablen und YES in der Spalte Wert ...

57voto

Besi Punkte 22262

Ich finde diese Alternative bequemer:

  1. Klicken Sie auf die Dropdown-Schaltfläche "Ausführen".
  2. Wählen Sie aus der Liste Profile
  3. Es sollte sich das Programm "Instrumente" öffnen, in dem Sie auch wählen können Zombies
  4. Jetzt können Sie mit Ihrer Anwendung interagieren und versuchen, den Fehler zu verursachen
  5. Sobald der Fehler auftritt, sollten Sie einen Hinweis darauf erhalten, wann Ihr Objekt freigegeben und damit deallociert wurde.

Zombies

Sobald ein Zombie entdeckt wird, erhalten Sie einen übersichtlichen "Zombie-Stapel", der Ihnen anzeigt, wann das betreffende Objekt zugewiesen wurde und wo es behalten oder freigegeben wurde:

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]

Vorteile im Vergleich zur Verwendung der Diagnoseregisterkarte von Xcode Schemes :

  1. Wenn Sie vergessen, die Option auf der Registerkarte Diagnose zu deaktivieren, werden keine Objekte aus dem Speicher freigegeben.

  2. Sie erhalten einen detaillierteren Stack, der Ihnen zeigt, in welchen Methoden Ihr beschädigtes Objekt zugewiesen/freigegeben oder zurückgehalten wurde.

5voto

pratap shaik Punkte 165

In Xcode 4.2

  • Projektname/Bearbeitungsschema/Diagnose/
  • Kontrollkästchen Zombie-Objekte aktivieren
  • Sie sind fertig

5voto

IgnazioC Punkte 3984

Ein in Xcode 7

<

oder wählen Sie Edit Scheme de Product > Scheme Menü

Wählen Sie Enable Zombie Objects bilden die Diagnostics Registerkarte

xcode 7 zombie flag

Alternativ, wenn Sie es vorziehen .xcconfig Dateien können Sie diesen Artikel lesen https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X