Ich habe sagen gesehen Vorschläge zu setzen , NSZombieEnabled
um true
während des Debuggens. Was ist NSZombie? Ist es ein Rahmen? Eine Einstellung?
Ich habe sagen gesehen Vorschläge zu setzen , NSZombieEnabled
um true
während des Debuggens. Was ist NSZombie? Ist es ein Rahmen? Eine Einstellung?
Antworten:
Es ist eine Speicher-Debugging-Hilfe. Insbesondere wenn Sie festlegen, dass NSZombieEnabled
ein Objekt , wenn es die Anzahl 0 beibehält, nicht freigegeben wird, sondern sich selbst in eine NSZombie
Instanz verwandelt . Immer wenn ein solcher Zombie eine Nachricht empfängt, protokolliert er eine Warnung, anstatt abzustürzen oder sich unvorhersehbar zu verhalten. Auf diese Weise können Sie subtile Probleme mit Überfreigabe / Autorelease ohne erweiterte Tools oder sorgfältige Nadel bei der Suche nach Heuhaufen beheben.
Der Name ist ein ziemlich offensichtliches Spiel mit der Tatsache, dass Objekte normalerweise als "tot" betrachtet werden, wenn sie die Anzahl 0 beibehalten. Mit dieser Einstellung existieren sie weiterhin in einer seltsamen Halbwertszeit - weder lebend noch ganz tot. Ähnlich wie echte Zombies, nur dass sie weniger Gehirn fressen.
Adam hat großartige Arbeit geleistet, um zu erklären, was Zombies sind, aber die Verwendung der Umgebungsvariablen ist nicht der beste Weg, diese zu finden und zu verfolgen.
Ein viel besserer Ansatz zur Zombieerkennung ist die Verwendung von Instrumenten. Beginnen Sie in XCode mit "Mit Instrument ausführen" und wählen Sie "Zuordnungen".
Stoppen Sie dann die Aufnahme direkt nach dem Start, drücken Sie die Taste "i" am Allocations-Instrument und aktivieren Sie "Referenzzählungen aktivieren" und "NSZombie-Erkennung aktivieren". Drücken Sie nun im Instrument erneut auf Aufzeichnen, und Ihre App wird gestartet. Wenn Zombie-Objekte gesendet werden, wird die Aufzeichnung gestoppt und in der Aufnahmezeitleiste wird ein Dialogfeld angezeigt. Klicken Sie darauf, um jeden Ort zu finden, an dem sich ein Objekt befand behalten oder freigegeben.
Bearbeiten: Vorheriger Rat war für XCode 3, hier ist eine Ergänzung für XCode 4:
In XCode 4.2 gibt es einen noch einfacheren Mechanismus, um die Zombie-Erkennung zu nutzen - das Zombie-Instrument. Verwenden Sie anstelle von "Ausführen" zum Starten der App "Profil". Daraufhin wird eine Instrumentenauswahl angezeigt. Wählen Sie "Zombie" und die App wird gestartet. Was auch immer Ihren Absturz verursacht, es erscheint ein Dialogfeld mit der Aufschrift "Zombie Messaged".
Klicken Sie dort auf den kleinen Pfeil im Dialogfeld. Daraufhin wird eine Liste aller Zeiten angezeigt, zu denen das Zombie-Objekt erstellt, beibehalten oder freigegeben wurde. Ziehen Sie die Seitenleiste nach oben, und Sie können zu jedem Eintrag gehen und in der Stapelverfolgung nach dem Code suchen, der für jede Anpassung der Aufbewahrungsanzahl verantwortlich war.
Ich stimme dem zu, was Kendall hinzugefügt hat. Es ist sehr nützlich, aber ich schlage vor, die Umgebungsvariable weiterhin auszuführen, damit Sie nicht vergessen, dass sie aktiviert sind. Ähnlich wie bei dem (jetzt abgelaufenen) Link bei Cocoa Dev habe ich dies so gesetzt, dass ich es nicht vermisse:
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) {
NSLog(@"ZOMBIES/AFOC ARE ENABLED!!! AAAAARRRRRRGH!!! BRAINS!!!");
}
Es erregt meine Aufmerksamkeit sehr schön.
Würde jemandem helfen.
Detailliertes Dokument zu Instrumenten. https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html#//apple_ref/doc/uid/TP40004652-CH3-SW1