Meine App stürzt ab und wird geschlossen, und es gibt sehr wenig Informationen darüber, warum

7

Ich habe einen Absturz und würde mich über einige Ratschläge freuen, wie ich das Problem finden und beheben kann. Das Spiel schließt einfach Downs. Wenn die App angeschlossen ist und im Debugger ausgeführt wird, gibt es keine Debug-Ausgabe, um zu sagen, warum wie bei einem "normalen" Absturz. Ich weiß, dass es nach einem LoadView passiert, weil ein NSLog am Ende von LoadView die letzte Ausgabe ist, immer auf dem selben Bildschirm. Unten ist der eingeschränkte Absturzbericht von Organizer ('unbekannter' Prozess, den ich denke, weil er im Debugger ausgeführt wurde?). Dies ist nur auf ios6 passiert. Es gibt anscheinend keine Speicherlecks nach dem Instrument, obwohl ich mir nicht sicher bin, ob ich es völlig vertraue. Der Absturz neigt dazu, zu passieren, wenn Sie das Spiel für eine Weile spielen und durch die Bildschirme hin und her gehen, so dass es sich wie ein Leck anfühlt. Die Tatsache, dass es immer zurückkehrt, wenn Sie zum selben Bildschirm zurückkehren, deutet jedoch darauf hin, dass es sich um ein Problem mit diesem View-Controller handelt. Ich weiß nicht, was rpages genau ist und ich weiß nicht, ob 90974 zu groß ist.

%Vor%

Ende

    
David John 31.10.2012, 06:37
quelle

1 Antwort

33

Ihre App stürzt ab, weil Jetsam (a.k.a memorystatus), der iOS-Handler für wenig Speicher ist, ihn tötet (ähnlich dem OOM von Linux und dem LowMemory-Killer von Android). Was Sie sehen, ist der Speicher-Snapshot. Erlaube mir zu erklären:

%Vor%

Ihre App hat die unglückliche und zweifelhafte Ehre, die meisten residenten Erinnerungen zu haben (um Größenordnungen, verglichen mit anderen). Wenn also die Bedingung für einen niedrigen Speicher auftritt - eine App, die malloc() einen großen Chunk haben will und nicht genügend freie Seiten übrig sind - wählt Jetsam einfach den oberen Speicher und - boom. %Code%. Daher gibt es keinen Debug-Dump usw. iOS hat keinen Swap, daher gibt es keine Möglichkeit, Prozesse auf dem Swap abzulegen, um Speicher zu löschen. Der einzige Weg ist raus. Tod.

Was Sie dagegen tun können:

Bevor Jetsam dich tötet, gibt es normalerweise eine niedrige Speicherbenachrichtigung über ein Ereignis, das die Obj-C-Laufzeit in Kill -9 übersetzt hat. Also geh damit um. Von dem, was Sie beschreiben, möchten Sie vielleicht auch -didReceiveMemoryWarning s freigeben. Diese verbrauchen viel Speicher.

    
Technologeeks 31.10.2012, 14:16
quelle