Wie richte ich meine ausführbare Datei in Xcode 4 ein NSZombieEnabled
und CFZombieLevel
für sie?
Wie richte ich meine ausführbare Datei in Xcode 4 ein NSZombieEnabled
und CFZombieLevel
für sie?
Antworten:
Drücken Sie in Xcode 4.x.
(oder klicken Sie auf Menubar
> Product
> Scheme
> Edit Scheme
)
Wählen Sie die Registerkarte "Diagnose" und klicken Sie auf "Zombie-Objekte aktivieren":
Dadurch werden freigegebene Objekte in NSZombie-Instanzen umgewandelt, die bei erneuter Verwendung Konsolenwarnungen drucken. 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 freigeben und nicht wissen, welches:
-[UITableView release]: message sent to deallocated instance
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.
Das Drücken entspricht ⌥⌘Rdem Auswählen von Produkt> Ausführen, während die AltTaste gedrückt gehalten wird.
Das Klicken auf das Kontrollkästchen "Zombie-Objekte aktivieren" entspricht dem manuellen Hinzufügen von "NSZombieEnabled = YES" im Abschnitt "Umgebungsvariablen" der Registerkarte "Argumente".
CMD-<
( CMD-SHIFT-comma
) oderProduct -> Scheme -> Edit SCheme...
Janos Antwort ist der einfachste Weg, sie zu finden. Ein anderer Weg wäre, wenn Sie auf die Dropdown-Leiste Schema -> Schema bearbeiten -> Argumente klicken und dann NSZombieEnabled in der Spalte Umgebungsvariablen und JA in der Wertespalte hinzufügen ...
Ich finde diese Alternative bequemer:
Profile
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 Registerkarte "Diagnose" der Xcode-Schemata :
Wenn Sie vergessen, die Option auf der Registerkarte Diagnose zu deaktivieren, werden keine Objekte aus dem Speicher freigegeben.
Sie erhalten einen detaillierteren Stapel, der Ihnen zeigt, auf welche Weise Ihr beschädigtes Objekt zugewiesen / freigegeben oder beibehalten wurde.
iOS Simulator > All
aus der Hauptvorlagenliste auswählen (Sie können dies nur im Simulator tun)
In Xcode 4.2
oder wählen Sie Edit Scheme
aus Product
> Scheme
Menü
Wählen Sie Enable Zombie Objects
aus der Diagnostics
Registerkarte
Wenn Sie .xcconfig
Dateien bevorzugen, können Sie alternativ diesen Artikel lesen: https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
Cocoa bietet eine coole Funktion, die Ihre Möglichkeiten zum Debuggen solcher Situationen erheblich verbessert. Es handelt sich um eine Umgebungsvariable mit dem Namen NSZombieEnabled. In diesem Video wird das Einrichten von NSZombieEnabled in Ziel-C erläutert
In Xcode> 4.3:
Sie klicken auf die Dropdown-Leiste Schema -> Schema bearbeiten -> Registerkarte Argumente und fügen dann NSZombieEnabled in der Spalte Umgebungsvariablen und JA in der Wertespalte hinzu.
Viel Glück !!!