Frage

In meiner Anwendung muss ich viele kurze verschiedene MP3s verwenden (etwa 500 Artikel nacheinander)

Ich verwende also skection spieloundfileamed

Nach ~ 200-Sounds, die es abgestürzt hat, mit "Fehler beim Laden der Ressource - Ressource S234.MP3 kann nicht geladen werden.Speicher steigt auf 70 MB.

Wie vermeide ich das?

was ich versuchte:

    .
  1. Sound in jeder Iteration wiederherstellen

    SKAction *mySound=[SKAction playSoundFileNamed:aa waitForCompletion:YES];
    
  2. Erstellen Sie die eine Variable in der Beggung von .m

    SKAction *mySound;
    
  3. und wiederverwenden Sie es in Iterationen

    generasacodicetagpre.

    2. Laden Sie alle Sounds, um einmal beim Start

    einst auf anzuordnen generasacodicetagpre.

    ... aber nie geändert - es stürzt ab und kann MP3 nicht laden.

    So reinigen Sie diesen Speicherlecks?

    bearbeitet Ich habe auch versucht, ARC auszuschalten und es jedes Mal manuell zu deaktivieren.Nichts änderte sich.

War es hilfreich?

Lösung

Dieses kleine Ditty ist es, dass Sie hier eine regelmäßige alte Sei verwenden, sondern die Wiedergabe in Code anpassen.

https://github.com/pepelkod/ios-examples/tree/Master / PlaySoundwithvolume

generasacodicetagpre.

}

Andere Tipps

Sie können mit einem "richtigen" Sound-Motor besser ausgeschaltet sein. Sie könnten Avaudioplayer oder noch besser , objektal (bereits in Kobold Kit ). Auf diese Weise haben Sie mehr Kontrolle über das Vorladen und Zwischenspeichern der Sound-Dateien und die Behandlung von Streaming-Audio (MP3) unterschiedlich von kurzlebigen Soundeffekten (normalerweise CAF oder WAV).

Für sehr kurze Sounddateien, sagen Sie kürzer als 5 Sekunden, MP3 ist nicht ideal. Sie sollten stattdessen CAF / WAV ausprobieren.

und überlegen Sie, wie viel Ihre Sounddateien im Speicher verwenden. Angenommen, jede MP3-Datei wird in einen 250-kb-Puffer, mal 500, dann in einem 120 MB Speicher gepuffert. Betrachten Sie nicht die Größe der MP3-Datei, da es sich um ein komprimiertes Format handelt, das wahrscheinlich nicht komprimiert wird.

Ich denke, dass Sie keine File-Deskriptoren ausführen. Was ich gefunden habe, ist, dass jedes Mal, wenn PlaySoundFileamed ausgeführt wird, die Sounddatei geöffnet und niemals geschlossen ist ... Daher wird der Dateideskriptor nicht freigegeben.

Mein Testing in Instrumenten führt mich zu glauben, dass es ungefähr 250 verfügbare Dateibeschreibungen gibt. Und meine Forschung sagt mir, dass nicht nur Dateizugriff, sondern auch andere Dinge verwendet. Ich denke also, dass Ihre ~ 200-Sound-Dateien gerade auf dem Weg zum Absturz klingen. Wenn eine Sounddatei die nächste Datei ist, die Xcode auf den Zugriff versucht, zuzugreifen, bekomme ich nichts vom Debugger, aber wenn die nächste Datei ein PNG ist (ich habe viel mehr Kunst, dann ertönt), gibt es

fehler= 24 (zu viele offene Dateien)

Ich fand den Fehler beim Spielen und wechselt jedes Mal, wenn ich verlorene, an meine Menüs-Szene von der Spielszene zurückschalte. Normalerweise spielte es nicht egal, aber leitete die Init-Methode für die Game-Play-Szene immer wieder, warf diese offenen Sound-Dateien auf.

Ich habe nach einem Weg gesucht und gesucht, um diese Dateien zu schließen, aber nicht mit dem Kommen. Ich denke darüber nach, ein Singleton umzusetzen, um meinen Sound auszuführen und alle PlaySoundFileamed-Anrufe zu bewegen, damit sie nur einmal angerufen werden. Ich denke, das ist ein Fehler von Apple. Diese Dateien sollten mit ARC geschlossen werden. Hat jemand etwas Ähnliches gefunden?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top