Wie richte ich meine ausführbare Datei in Xcode 4 ein NSZombieEnabledund CFZombieLevelfür sie?
Wie richte ich meine ausführbare Datei in Xcode 4 ein NSZombieEnabledund CFZombieLevelfü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:
ProfileZombies
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 > Allaus der Hauptvorlagenliste auswählen (Sie können dies nur im Simulator tun)
In Xcode 4.2
oder wählen Sie Edit Schemeaus Product> SchemeMenü
Wählen Sie Enable Zombie Objectsaus der DiagnosticsRegisterkarte
Wenn Sie .xcconfigDateien 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 !!!