2015-10-12 16 views
11

Wenn ich meine App von Xcode laufen, ist es klar, dass ich ein Speicherleck haben:Xcode zeigt Speicherverlust, aber Instruments nicht

enter image description here

Wenn ich eine benutzerdefinierte Viewcontroller den Speicher erhöht sich vorstellen, aber Wenn ich es ablehne, geht es nicht zurück.

So Tool Allocation Ich habe auch Instruments, aber das erzählt eine andere Geschichte:

enter image description here

Wie Sie sehen können, Instrumente Spitzen zeigt, wenn ich das Viewcontroller präsentieren, aber die Speichernutzung fällt zurück vorherige Ebenen, wenn es entlassen wurde.

Ich habe meinen Code mindestens 15 mal überprüft und persönlich finde ich keine Speicherlecks und stimme damit Instrumenten zu. Ich implementierte auch die deinit Funktion in allen meinen Objekten, die wie so zugewiesen bekommen würden:

deinit { 
    print("Deinnited \(id)") 
} 

Und alle Objekte auf die Konsole wie erwartet ausgedruckt.

Was könnte passieren? Ich verwende:

  • iOS 9.0
  • XCode Version 7.0 (7A220)
  • Swift 2,1

Sowohl die Schemata für Run und Profil ist in "debug"

+0

Überprüfen Sie einfach, aber wie Sie die Ansichten ablehnen? Gibt es auch Leerlaufzeiten? Ich habe festgestellt, dass Instrumente nur die Softwareseite zeigen. Es wird dir den Widder nicht zeigen, der einfach noch nicht aufgeräumt ist. Wenn keine Leerlaufzeit vorliegt, kann das Betriebssystem RAM nicht bereinigen. Hast du ein Singleton? oder geteilte Instanz für die Einlösung? Wahrscheinlich ein starker Referenzzyklus. Versuchen Sie, Dinge zu schwach einzustellen. Ideen einfach nur herumwerfen ... –

+0

Wenn Sie mehrfach hintereinander öffnen und schließen, sehen Sie einen steigenden Speicherverbrauch in Xcode? – Darko

+0

@Darko ja. Ich sehe einen steigenden Speicherverbrauch in Xcode, aber nicht in Geräten –

Antwort

3

Nach reiflicher Recherchen in Google und anderen Foren, scheint dies ein Fehler mit XCode zu sein.

+0

Dies ist immer noch ein Fehler in Xcode ab Version 7.2.1 –

2

Aktualisierung des vorherigen Texts nach mehr Erfahrung mit der Werkzeugnutzung.

enter image description here

Nach einigen neueren Experimenten der Instrumente in Xcode 7.2.1, bemerkte ich, dass das Diagramm Leaks nicht immer funktioniert. Nachdem Sie den Prozess der Instrumente und des Simulators beendet haben, laufen Sie erneut ... das Diagramm erschien. Es scheint zeitweise Probleme zu geben und die Ursache noch nicht gefunden zu haben.

enter image description here

+0

Dies hat das Problem für mich nicht aufgedeckt. Ich konnte mich mit der Leaks-Profilvorlage profilieren und stellte fest, dass die Leaks nicht auftraten, da ich weiterhin Leckkontrollen auf dem Weg erhielt, die jedes Mal bestanden. Mit dem integrierten Speicherprofiler von Xcode 7.x ist definitiv etwas nicht in Ordnung. Instruments zeigt an, dass "Persistent Bytes" über die Lebensdauer der App stabil bleibt, während "Total Bytes" weiter wächst. Meine Vermutung ist, dass sie das falsche Feld in Xcode verwenden, da diese Zahl sehr nahe am "Total Bytes" -Wert liegt, der beim Profiling in Instruments angezeigt wird. –

+0

Nach einigen kürzlichen Experimenten, bei denen die Geräte in Xcode 7.2.1 verwendet wurden, habe ich festgestellt, dass das Leaks-Diagramm nicht immer funktioniert. Nachdem Sie den Prozess der Instrumente und des Simulators beendet haben, laufen Sie erneut ... das Diagramm erschien. Es scheint zeitweise Probleme zu geben und die Ursache noch nicht gefunden zu haben. –

5

Es ist ein extrem ärgerlich Xcode Fehler oder vielleicht ein Merkmal :), wenn Sie es aus Apples Perspektive zu sehen.

Ich habe es heute begegnet und hier ist, wie man es löst.

  1. Drücken Sie den Anwendungsnamen in dem Sie das Schema (neben der Stopp-Taste in Xcode) gesetzt

  2. Auswählen 'bearbeiten Schema'

  3. Select 'run' (linke Seite des Pop -up Fenster)

  4. Wählen Sie 'Optionen' (oberer Teil des Pop-up-Fenster)

  5. uncheck der ‚enabl e Backtrace Aufnahme‘(letzte Auswahl müssen Sie nach unten scrollen)

Der Nachteil ist, wird das Backtrace deaktiviert, wenn Sie abstürzen. Ich nehme an, dass Sie diesen Schalter je nachdem, auf was Sie sich konzentrieren möchten, umschalten möchten.

Im 'Profil'-Schema ist das Backtrace nicht aktiviert, deshalb haben Sie nur den Speicherleck bei Verwendung des Debug-Navigators (Laufschema) und nicht in Geräten (Profilschema) gesehen.

/Anders.

+0

Verdammt ... Vielen Dank @Andres Cedronius – user1872384

Verwandte Themen