Debugging-Strategien für das Überschreiben in ARC?

7

Ich habe einige Objekte, die an eine Menge verschiedener Ansichten und Controller in meiner Anwendung übergeben werden. Sie werden nicht freigegeben, wenn ich das von ihnen erwarte. Offensichtlich gibt es irgendwo einen fehlerhaften starken Zeiger, aber die Oberfläche, wo sie sein könnte, ist sehr groß - diese Objekte werden in viele verschiedene Datenstrukturen hinein und heraus bewegt.

Meine übliche Lösung ist hier Leaks (die keine Zyklen anzeigt) und Zuordnungen (die mehr als 500 Retain / Releases für dieses Objekt auflisten). Gibt es eine Möglichkeit, meinen Suchraum hier zu verkleinern?

Im Idealfall gibt es ein Werkzeug, mit dem ich einen Zeiger eintippen und alle starken Referenzen auf das Objekt sehen kann, und wahrscheinlich könnte ich die Liste überblicken und die zusätzliche Referenz in ungefähr 60 Sekunden finden . Tatsächlich gibt es ein solches Werkzeug - das Objekt-Graph-Instrument - aber es ist nicht für iOS-Software verfügbar.

    
Drew 07.02.2013, 18:41
quelle

2 Antworten

18

Sie möchten das Zuordnungsinstrument. Um einen individuellen Objekttyp zu verfolgen, starten Sie die Anwendung. Sie müssen bei jedem wichtigen Ereignis einen Heapshot erstellen (ich erstelle sie normalerweise an Punkten, wenn Sie gerade von oder zu einem View-Controller gewechselt haben).

Sobald Sie einen Heapshot haben, der das Objekt enthalten sollte, das Sie aufspüren möchten, dann sollten Sie in der Lage sein, diesen Objekttyp im Offenlegungsdreieck der Heapshot zu finden. Für jedes Objekt dieses Typs können Sie einen Überblick darüber erhalten, welche Zurücksetzungen und Freigaben an dieses Objekt gesendet wurden, indem Sie auf den Pfeil in der Zeile dieses Objekts klicken.

    
David Doyle 28.03.2013 17:38
quelle
0

Die einfachste Methode, um festzustellen, ob es einen Retain-Zyklus gibt oder nicht, indem Sie einen Haltepunkt in die dealloc() / deinit() (swift) -Methode Ihres Controllers setzen. Wenn Sie Ihren Controller öffnen, prüfen Sie, ob diese Methode aufgerufen wird oder nicht behalten Zyklus in Ihrem Controller vorhanden diese Methoden werden nicht aufgerufen.

Schnell

%Vor%

Ziel C

%Vor%

Wenn Sie mehr über die starken Referenzen und die Ursachen erfahren möchten, sollten Sie mit Instrument als der anderen Antwort gehen.

    
Anshad Rasheed 16.04.2017 06:35
quelle