Xcode 7 / Swift 2.1 "Nachricht vom Debugger: Beendet wegen Speicherproblem"

9

Ich arbeite an einem Kartenspiel in Swift 2.1 mit Xcode 7 und meine App läuft gut im Simulator, stürzt aber ab, wenn ich es auf meinem Gerät teste.

Mit Breakpoints habe ich den Absturz auf eine NSTimer.scheduledTimerWithTimeInterval -Methode lokalisiert, die nach einer Animation ausgeführt wird (und dann eine andere Animation auslöst).

Ich dachte, es wäre vielleicht die Größe meiner Bilder, da einige ziemlich groß waren (& gt; 4 MB), also komprimierte ich alle Bilder in der Animation und insgesamt nehmen sie jetzt weniger als 1 MB auf.

Ich habe auch die Zombie- und Leck-Tools ausgeführt und nichts gefunden, also bin ich ein wenig perplex. Hier ist der Code, wo es abstürzt.

%Vor%

Und hier ist der Code, der die Animation tatsächlich ausführt (in einer UIImageView-Unterklasse):

%Vor%

Als eine Randnotiz gibt der Debugger einfach an: "Nachricht vom Debugger: Beendet wegen Speicherproblem."

Jede Hilfe wäre sehr willkommen, bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Danke!

BEARBEITEN:

Also, um es noch mehr zu testen, habe ich func playFlipAnimation geändert, um 5 Bilder anstelle der ursprünglichen 12 zu iterieren. Das scheint den Absturz gelöst zu haben, aber ich bin mir immer noch nicht sicher, warum es mehr Bilder gibt Absturz der Anwendung an erster Stelle.

    
rdespoiu 28.11.2015, 04:19
quelle

2 Antworten

1

Ein paar Punkte:

  1. Da Derek Lee bereits darauf hingewiesen hat, dass Bilder sehr speicherintensiv sein können. Meiner Erfahrung nach speichert die Runtime auch Bilder, die nach der Verwendung für einen bestimmten Zeitraum im Hintergrund zwischengespeichert werden. Dies könnte für Ihre Situation relevant sein, denn wenn Sie Ihren Code betrachten, laden Sie jedes Mal, wenn die Animation aufgerufen wird, einen neuen Satz von zwölf Bildern. Wenn Sie diese Animation häufig wiederholen, ergibt sich schnell eine Menge Speicher, besonders bei Bilddateien mit 1 MB. In diesem Fall mag es in der kurzen Zeit zwar ineffizient erscheinen, aber vielleicht möchten Sie ein Array von Bildern initialisieren, wenn die Klasse initialisiert wird, was Sie wiederverwenden können.

  2. Eine Sache, die Sie tun können, wenn Sie über eine Schleife iterieren, von der Sie wissen, dass sie speicherintensiv ist, legen Sie sie in einen Autorespulepool. Siehe Entwicklerreferenz unter: Ссылка Ich weiß, dass technisch ARC alles sein sollte, was man in der modernen iOS-Welt braucht, aber das funktionierte für mich, als ich eine sehr datenintensive Prozedur in einer meiner Apps aufbaute.

  3. Es ist unwahrscheinlich, dass Sie jemals eine Speicherwarnung auslösen, die in Simulator ausgeführt wird, da nicht berücksichtigt wird, dass der zugrunde liegenden Hardware wesentlich mehr Kapazität zur Verfügung steht als dem Zielgerät. In meiner unendlichen Weisheit habe ich mal etwas rennen lassen, was am Ende 50 GB Speicher verbraucht hat, aber das hat keine Art von Warnungen auf Simulator ausgelöst!

  4. Abgesehen davon würde ich meinen, Sie sollten Ihre Kartenbilder auf weniger als 1 MB komprimieren können. Natürlich hängt das von der Art des Bildes ab, das Sie verwenden möchten (sind das Fotos?), Aber wenn es ein einfaches .png ist, dann erscheint mir das ziemlich groß.

Ich hoffe, das hilft.

    
Sparky 10.09.2016, 13:24
quelle
2

Ich habe das gleiche Problem gefunden und festgestellt, dass es das Problem war, dass ich die Zombie-Objekte aktivieren in dem Schema überprüft habe. Sie können es also auch überprüfen.

    
qingqinghebiancao 06.12.2016 03:39
quelle

Tags und Links