2016-07-22 8 views
1

Ich lief die Instrumente Leaks-Tool, um zu testen, ob meine App Lecks hat, und es zeigte mir, dass ich einige Lecks habe. Ich bin kein Experte auf Lecks Fixierung, ich frage mich, obUndichte Speicher in iOS

  1. ich ein Leck haben, und
  2. Was ich tun sollte, um es zu beheben.

enter image description here

+1

Ich würde vorsichtig antworten, * "vielleicht tust du, und vielleicht tust du nicht." Dies sind kleine Speicherobjekte und es scheint nur eine Handvoll von ihnen zu geben.Der Lecksucher * könnte sich irren.Wenn Sie wirklich ein Leck haben, geht diese Anzeige für viele Seiten weiter.Und außerdem wird die Liste im Laufe der Zeit deutlich * verlängern, und die gleichen Adressen bleiben jedes Mal in der Liste, wenn Sie sie sehen. Wenn dies nicht das ist, was Sie (klar) sehen ... und Sie werden es klar erkennen, wenn Sie es sehen ... könnte es ein falsches Positiv sein. –

Antwort

4

Sie scheint ein Leck zu haben, aber es sieht bescheiden. Sie können auf die kleinen Pfeile neben der Speicheradresse klicken, und Sie sollten einen Bildschirm aufrufen, in dem Sie nachsehen können, wo dieser Speicher zugewiesen wurde. Dies ist der erste Schritt, um herauszufinden, warum die Zuordnung nicht aufgehoben wurde. (Ich würde die Objekte nicht starten, da sie häufiger direkt auf Ihren Code abbilden und einfacher zu diagnostizieren sind).

Aber manchmal werden Sie bescheidene Lecks wie diese sehen, die, wie Mike Robinson sagte, falsche Positive sind. Und selbst wenn es kein falsches positives Ergebnis ist, könnte es vom Betriebssystem stammen, nicht von Ihrem Code. Daher gehen wir manchmal eine Übung durch, um die App wirklich zu betonen (z. B. wiederholt durch den Teil der App zu laufen, der das Leck zu erzeugen scheint), um zu sehen, wie schnell das Leck, wenn überhaupt, wächst. Es sieht so aus, als ob Ihr Leck zu weniger als 1 Kilobyte aufaddiert und nicht weiter wächst. Sie könnten sich also keine Sorgen machen. (Oder zumindest, wenn Sie sich vergewissert haben, dass nichts in Ihrem Code das verursacht.)

Persönlich bin ich weniger besorgt über diese bescheidenen Lecks als das signifikante Wachstum der Gesamtspeicherauslastung. Es könnte nur ein geeignetes Caching von Bildern sein, oder es könnte ein Zeichen für einen verlassenen Speicher sein (welches das Leck-Tool Ihnen nicht zeigt). Ich würde versuchen, Speicherwarnung zu simulieren und zu sehen, wie viel von diesem Speicher wiederhergestellt wird. Sie können auch über die Zeitleiste ziehen und in die Zuweisungsansicht wechseln, und Sie können sehen, wie diese Speicherbelegung berücksichtigt wird. Vielleicht möchten Sie sicherstellen, dass Sie kein tiefer liegendes Speicherproblem haben, das nichts mit den kleinen Lecks zu tun hat, die von "Leaks" gemeldet werden. Nicht alle Speicherprobleme tauchen in "Leaks" auf: Das "Allocations" -Wachstum kann auch auf Probleme hinweisen, und ich wäre ein wenig besorgt, dass Sie nicht sehen, dass Ihre Speichernutzung auf ein stationäres Niveau sinkt.

Apple zeigte ein Beispiel für eine Zuordnungsgrafik und wies uns an, auf den roten "verschwendeten" Speicher zu achten. Der Warm-up Teil ist nicht so kritisch, noch ist die Zwischenstufe (solange es nicht zu hoch ist), aber das Wachstum des Steady-State-Niveaus ist Hinweis auf einer ernsteren Speicherproblem:

enter image description here

In Ihrem Fall sehe ich die App nicht in einem stabilen Zustand, weswegen ich ein bisschen besorgt bin. Aber ich bin mir nicht sicher, wie viel Sie die App ausgeübt haben oder ob Sie ihr die Chance gegeben haben, in diesen stationären Zustand zurückzukehren.

Wenn Sie beobachten (die etwas veraltet, aber immer noch relevant) WWDC 2013 Fixing Memory Issues, wird es Sie mit Tools und Techniken zur Diagnose und Behebung von Speicherproblemen. Hier kommt die obige Grafik zur Sprache und beschreibt sie genauer. Beachten Sie, dass die PDF-Präsentation nett ist, aber das Video ist viel besser, da es einige praktische Demonstrationen für die Verwendung von Instrumenten enthält. Die WWDC 2012 iOS App Performance: Memory ist auch gut. (Es sieht so aus, als könnten Probleme beim Streamen der Videos auftreten, aber es sieht so aus, als könnte man sie noch herunterladen.)

+0

Große Antwort Rob! –