Hilfe bei der Suche nach memory leaks (Allgemeine Tipps)
Dies ist auf iOS-Gerät ist das iPad.
Hier ist, was passiert:
- Ich Lauf app auf dem Gerät oder Debuggen und ausführen mithilfe von Xcode.
- Nach 5 Minuten erhalte ich einen memory-Warnung der Stufe 1.
- Eine minute später erhalte ich einen memory-Warnung der Stufe 2.
- Eine weitere minute später
Program received signal: “0”.
Ich auf Dichtheit geprüft mit Lecks in Instrumente und erkannt, keine Lecks.
Doch nach Activity Monitor, meine app verwendet zunächst 30 MB, und wächst in der Größe von über 100mb im Laufe der Zeit (über 200 Kb pro Sekunde!). So, anscheinend Lecks erkennt nicht alle Speicher-Lecks.
Also meine Frage: wenn Leckagen kann es nicht erkennen, gibt es irgendwelche Allgemeinen Tipps um Sie zu finden, und gibt es ein besseres tool, um diese Lecks?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie ich würde ihm nähern,
Alle nennen Sie die Klassen mit einem Präfix, so können Sie leicht sehen, wie Sie in Instrumente
XCode->Ausführen->Run with performance tool->Zuweisungen
Stoppen Sie nun Ihre app und geben Sie den Namen der Klasse, die Sie vermuten ist undicht in das Suchfeld ein. (dies ist, wo das Präfix ist praktisch). Der start Instrumente wieder mit der "Record" - Taste
NSAutoReleasePool
- und call -[pool drain]
wenn es Sinn macht.Ist es nicht immer notwendig, dass Sie Lecks haben im Fall, den Sie erwähnt haben. Sie möglicherweise verwendet haben, viel autoreleased Objekte im Zeitpunkt der Durchführung Zeit, die Sie hier erwähnen.
Man könnte hinzufügen, eine stark dimensionierte Objekte in eine collection-Objekt. Wenn das der Fall ist, verwenden Sie eine separate Autorelease-pool für diesen Fall reduzieren Sie den Speicherbedarf der Anwendung.
Ist es bevorzugt, wenn Sie können tools verwenden, um Lecks zu finden, aber wenn Sie sind völlig ratlos, gibt es eine andere Technik, die ich benutze.
Start mit auskommentieren fast alles, und dann langsam wieder hinzufügen einer Komponente zu einer Zeit, bis der Speicherverlust tritt wieder. So können Sie in null auf die Funktion oder code-block, der das problem verursacht.