Finden Sie, wo das Objekt mit ARC beibehalten wird
Ich habe ein Objekt, das gespeichert bleiben, mehr als nötig (wahrscheinlich aufgrund einer Eigenschaft, die strong
statt weak
). Große Codebasis, so ist es schwer zu finden wo.
Wie kann ich alle Zeilen, in denen das Objekt beibehalten, als mit ARC?
Wenn ich nicht mit der ARC, ich glaube, ich könnte einfach überschreiben retain
und schauen von wo es aufgerufen wird. Kann ich etwas tun, ähnlich wie mit ARC?
InformationsquelleAutor der Frage hpique | 2012-09-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verfolgen Wachstum einer Anwendung, Heapshot Analyse hat sich als sehr effektiv. Sie erfassen auch wahre Lecks und Akkretion von Speicher, in denen die Zuweisungen nicht berücksichtigt, die durch Lecks.
Finden Sie alle retain/release-events, und Ihre backtrace, die Verwendung der Zuweisungen instrument. Treffer die kleinen (i) - Taste auf die Zuweisungen instrument und schalten Sie auf "Record Referenz zählt". Drehen auf "Nur-track active-Zuweisungen" reduziert die Menge der Daten, die durch Instrumente, so dass es flotter (und Toter Zuweisungen sind nicht wirklich nützlich in diesem Zusammenhang, kann aber in anderen).
Mit, dass, Tauchen Sie ein in eine Zuweisung (durch klicken auf den rechts-Pfeil im Feld Adresse) finden Sie alle retain/release-events und sehen Sie genau, wo Sie stattgefunden haben.
InformationsquelleAutor der Antwort bbum
Ich es geschafft, zu finden, die problematische
retain
folgt:-fno-objc-arc
auf das Objekt der Klasse Compiler-Flagszum deaktivieren der BOGEN für die Klasse.
retain
(einfach anrufensuper
) und setzen Sie einen Haltepunkt auf.retain
genannt wird.InformationsquelleAutor der Antwort hpique
Letzte Woche half ich ein paar Freunde debug-Lecks in Ihrem ARC-Projekt.
Einige Tipps:
1/Bauen für die Profilerstellung und starten Sie Instrumente mit der Lecksuche. Dann entdecken Sie die aktuell zugewiesenen Objekte, finden Sie das Objekt, das Sie wollen (Sie können diese Sortieren nach name) und schaut in seine retain/release-Geschichte. Beachten Sie, dass retain-count ist nicht sehr hilfreich mit ARC. Sie haben zu prüfen, es manuell Schritt für Schritt.
Versuchen, zu kommentieren, den gesamten code, das könnte die Quelle des Lecks, und dann kommentieren Sie es Schritt für Schritt.
2/Setzen Sie ein
NSLog
in Ihreinit
und in Ihredealloc
zu beobachten, wenn das Objekt erstellt und zerstört werden.3/schauen Sie nicht nur zu eigenschaftsdefinitionen, zu sehen, wenn die Eigenschaft setter implementiert werden manuell. Ich fand ein problem in meinem Freunde-Projekt so Aussehen:
InformationsquelleAutor der Antwort Sulthan
Diese Lösung war etwas hilfreich für mich. Es verwendet grundsätzlich method swizzling tricks der ARC-compiler zu denken, du bist nicht zu überschreiben, behalten und loslassen.
}
InformationsquelleAutor der Antwort zenchemical
Wenn du mit der ARC du würdest niemals die option zum hinzufügen behalten,
und wenn Sie umgewandelt haben, das Projekt zu BOGEN mit unten-option, würden Sie aufgefordert werden, mit Fehler
Wenn Sie haben, legen Sie die Eigenschaft wie
strong
dann ordnen Sie das Objekt einmal durch das ganze Projekt z.B.self.yourobject = [[NSMutableArray alloc]init];
. Es gibt keine Abkürzung dafür.InformationsquelleAutor der Antwort Vimal Venugopalan