Frage XCode - Das Zuordnungsinstrument verstehen


Bei der Profilerstellung einer App stelle ich fest, dass die Live-Bytes jedes Mal um etwa 250 KB anwachsen, wenn ich bestimmte Aktionen (mit UIViews) ausführe.

Wenn man in der Liste der Objekte nachschaut, liest der (wachsende) Haupttäter einfach "malloc 144 bytes".

Gelegentlich habe ich das Instrument der Zuteilung benutzt, um Objekte zu entdecken, an denen ich länger festgehalten habe, als ich möchte, aber ich bin nicht sicher, wie man die "malloc" -Objekte interpretieren soll.

Jede Anleitung würde sehr geschätzt werden.


5
2018-02-07 02:46


Ursprung


Antworten:


Ein paar Gedanken:

  1. Das Tool "Zuweisung" ist großartig, aber ich würde mich darauf konzentrieren Lecks, zuerst. Haben Sie dort eine saubere Gesundheit?

  2. Haben Sie Ihren Code durch den statischen Analyzer laufen lassen ("Analyse" im Menü "Produkt"). Vor allem im Nicht-ARC-Code können viele Probleme erkannt werden.

  3. Benutzt du ARC? Wenn dies der Fall ist, wird die Suche eingeschränkt.

  4. Hast du Zombies an? Dies führt dazu, dass der Speicher nicht freigegeben wird. Stelle sicher, dass Zombies ausgeschaltet sind.

  5. Sind Sie sicher, dass Sie keinen starken Referenzzyklus (Retain-Zyklus) haben? Du kannst Geben NSLog oder Haltepunkte in Ihrem View-Controller dealloc und stellen Sie sicher, dass es aufgerufen wird, und stellen Sie sicher, dass Sie keinen starken Referenzzyklus haben (eine zirkuläre Referenz zwischen zwei oder mehr Objekten, die nicht freigegeben wird). (Wenn Sie keine haben dealloc Methode, fügen Sie einfach eine mit einem hinzu NSLog Anweisung.) Nicht zu invalidate eine Wiederholung NSTimer ist ein wunderbares Beispiel für etwas, das unabsichtlich starke Referenzzyklen verursachen kann. Das Schlüsselproblem ist, dass Sie dies bestätigen müssen dealloc findet statt.

  6. Sind Sie definitiv dabei, den View-Controller zu öffnen / zu löschen, anstatt eine andere Kopie des anderen View-Controllers zu drücken / präsentieren? (Nicht zu sehen NSLog/ Haltepunkt in der dealloc Methode kann dadurch verursacht werden, zusätzlich zu dem starken Referenzzyklus, der im vorherigen Punkt diskutiert wurde.)

  7. Auf deinen 256 (!) Bildansichten machst du das imageNamed einstellen image Eigentum? Das imageNamed Methode Caches Bilder geben Speicher erst dann frei, wenn Sie eine Speicherwarnung erhalten (obwohl sie nur Speicher verbrauchen würde, wenn Sie neue Bilder abrufen und vorhandene Bilder nicht erneut abrufen).

Unter dem Strich kann es eine Menge möglicher Probleme geben und es gibt nicht genug in Ihrer Frage, um uns zu helfen, das Problem zu diagnostizieren. Sie müssen uns helfen, das Problem einzugrenzen.

Aber fangen Sie an, Ihre Controller zu überprüfen und sicherzustellen, dass sie freigegeben werden, wie sie sollten. Ich fühle deinen Schmerz über das 144 Byte malloc Probleme, aber das ist wahrscheinlich nicht der Grund für den Verbrauch von 250kb jedes Mal. Das malloc ist eher ein Symptom für ein Problem, nicht die Ursache des Problems, und ich würde mich auf die grundlegenderen Dinge konzentrieren, die oben aufgeführt sind, bevor ich zu viel Zeit damit verbringe, die Quelle des Problems aufzuspüren malloc Anrufe.


11
2018-02-07 05:27