CMMotionManager - Memory Leak

  • Marco Feltmann schrieb:

    Wenn es sich um eine Art Spiel handelt, worauf CONST_fps hinweist (wer spielt denn bitte 4-6 Stunden?), solltest Du wirklich einmal den Ansatz vom MarbleMaze ansehen.

    So, ich habe mir nun auch angeschaut was bei MarbleMaze gemacht wird. Auch da wird kein Speicher freigegeben. Es spielt also absolut keine Rolle, ob ich den MarbleMaze-Ansatz wähle oder alles so belasse wie ich es implementiert habe.

    Daher werde ich die Tage eine andere Strategie verfolgen:

    PHP-Quellcode

    1. motionManager.accelerometerUpdateInterval = DYNAMIC


    Ich werde das accelerometerUpdateInterval dynamisch anpassen. Je nachdem wie intensiv das Smartpone bewegt wird werde ich eben das Intervall anpassen. Wird das Smartphone in eine ruhende Lage versetzt dann wird das Intervall auf ca. 1 Sekunde gesetzt. Nehme ich das Smartphone in die Hand und bewege es, so wird das Invervall eben auf 1/10 Sekunden gesetzt. Ich denke, dass ist ein guter Kompromiss.

    Dadurch wird nur noch halb soviel Speicher belegt - bezogen auf die Zeitachse, wenn ich das Smartphone nicht bewege.


    Naja, ist zwar nicht schön, aber immerhin eine echte Verbesserung.
  • So, meine App hat die Nacht tatsächlich nicht überlebt.

    Ich werde jetzt das Intervall in CMMotionManager dynamisch halten:

    - Smartphone liegt auf dem Tisch oder steckt auf einer Ladestation für eine Zeit x -> Invervall == 1 Sekunde (ca. 50 KB Speicher je Minute - laut Instruments, lebende Objekte und ARC)
    - Smartphone wird in die Hand genommen -> Intervall == 1/25 Sekunden (ca. 1 bis 2 MB Speicher je Minute - laut Instruments, lebende Objekte und ARC)

    Das betrifft bei mir u.a. auch den ParalaxEffekt, den ich implementiert habe.

    Wem diese Dynamik nicht gefällt, kann das dann eben unter Einstellungen deaktivieren (Energiesparmodus (An/ Aus)).



    Ich möchte mich bei euch allen Bedanken! Ohne euch hätte ich mir das wohl nie so genau angeschaut und hätte es wohl einfach so hingenommen.

    Sollte es irgendwann doch eine Lösung für dieses Speicherverhalten von CMMotionManager geben, dann bitte posten ;)