web-dev-qa-db-de.com

Wie richte ich NSZombieEnabled in Xcode 4 ein?

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

456
Chetan

In Xcode 4.x drücken Sie

R

(oder klicken Sie auf 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 die Speichernutzung erhöht (kein Objekt wird wirklich freigegeben), aber die Fehlerberichterstattung verbessert.

Ein typischer Fall ist, wenn Sie ein Objekt übermäßig loslassen 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 App Store-Übermittlung archivieren. Sie müssen nichts berühren, bevor Sie Ihre Anwendung freigeben.

Drücken Sie R ist dasselbe wie die Auswahl von Produkt> Ausführen, während die Alt Taste gedrückt.
Das Aktivieren des Kontrollkästchens "Zombie-Objekte aktivieren" entspricht dem manuellen Hinzufügen von "NSZombieEnabled = YES" im Abschnitt "Umgebungsvariablen" der Registerkarte "Argumente".

754
Jano

Janos Antwort ist der einfachste Weg, sie zu finden. Eine andere Möglichkeit wäre, wenn Sie auf die Dropdown-Leiste Schema -> Schema bearbeiten -> Registerkarte Argumente klicken und dann NSZombieEnabled in der Spalte Umgebungsvariablen und YES in der Wertespalte hinzufügen ...

70
learner2010

Ich finde diese Alternative praktischer:

  1. Klicken Sie auf "Run Button Dropdown"
  2. Wählen Sie aus der Liste Profile
  3. Das Programm "Instrumente" sollte sich öffnen, wo Sie auch Zombies auswählen können.
  4. Jetzt können Sie mit Ihrer App interagieren und versuchen, den Fehler zu verursachen
  5. Sobald der Fehler auftritt, sollten Sie einen Hinweis erhalten, wann Ihr Objekt freigegeben und daher freigegeben wurde.

Zombies

Sobald ein Zombie erkannt wird, erhalten Sie einen ordentlichen "Zombie-Stapel", der Ihnen anzeigt, wann das betreffende Objekt zugewiesen wurde und wo es aufbewahrt 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 gegenüber der Verwendung der Registerkarte Diagnose der Xcode-Schemata:

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

  2. Sie erhalten einen detaillierteren Stapel, der Ihnen zeigt, in welchen Methoden Ihr beschädigtes Objekt zugewiesen/freigegeben oder beibehalten wurde.

57
Besi

Ein In Xcode 7

<

oder wähle Edit Scheme aus dem Product> Scheme Menü

wählen Enable Zombie Objects bilden die Registerkarte Diagnostics

xcode 7 zombie flag

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

5
IgnazioC

In Xcode 4.2

  • Projektname/Bearbeitungsschema/Diagnose /
  • Kontrollkästchen "Zombie-Objekte aktivieren"
  • Sie sind fertig
5
pratap shaik

Cocoa bietet eine coole Funktion, die Ihre Fähigkeiten zum Debuggen solcher Situationen erheblich verbessert. Es handelt sich um eine Umgebungsvariable mit dem Namen NSZombieEnabled. Sehen Sie sich dieses Video an, in dem das Einrichten von NSZombieEnabled in Objective-C erläutert wird

1
user2554822