AIR iOS app crashes

Hi everybody,

I’ve been working on an iPad app in Flash and all went well but at the end I discovered a problem. I’m making a childrens book with a page on each frame. And a can move between the pages. On the pages things are happening. Things can be touched and make sounds or can be moved.The problem is that the app seems to be instable. After a while it crashes and I have to start over again.

I did a lot of optimizing as told at different blogs made sure all events are closed when I don’t need them anymore but it still crashes. Now I was thinking it could be the sound that is the problem. On each pages I load at least one sound some playing on click, endlessly looping when on the page. Could this give me a memory problem? I looked for sound and sounchannel close or remove options but couldn’t find a right solution. I think it’s easiest to put this remove sound stuff in the killMe function right? Here is a script I load everypage.

I’m working in Flash 5.5 with the AIR 2.7 SDK. And am testig on a iPad 3G.

Hope for some good tips or suggestions,
Thanks in advance.

Joost

package  {
   
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
   
    public final class konijn2MC extends MovieClip {
        //variables////////////////////////
        //import sound
        var mySound:Sound = new p18_sound();
        //
        var snd3Animal:Oceaan;
        var snd3AnimalChannel:SoundChannel;
        //
        //set frame number for random static motion
        var framePlacesSTAT:Array = new Array(10,10);
        //set delay time
        var maxTimeDelay:int = 7000; // 1000 is one second;
        var minTimeDelay:int = 5000; // 1000 is one second;
        var startTimeDelay:int = 1000; // 1000 is one second;
        var newTimeDelay:int = 0; // 1000 is one second;
        var timerSTAT:Timer;
        //set different static motion variantions
        var differentImages:int = 1;
        //
        //set frame number for touch animation
        var framePlacesTOU:Array = new Array(110, 110);
        //set frame delay for touch animation
        var frameDelayTOU:Array = new Array(300, 300);
        var countArrayTOU:int = 0;
        ///////////////////////////////////
        public function konijn2MC() {
            snd3Animal=new Oceaan();
            snd3AnimalChannel=snd3Animal.play(0,1000);
            addEventListener(MouseEvent.MOUSE_DOWN, touchFunc);
            addEventListener(Event.REMOVED_FROM_STAGE, killMe);
            //call random static animation
            stopstartSTAT();
        }
        //////////////////////STATIC functions/////////////////////
        function stopstartSTAT():void{
            if(timerSTAT){
                timerSTAT.stop();
            }
            //
            if(newTimeDelay == 0){
                newTimeDelay = startTimeDelay;
            }
            else{
                newTimeDelay = Math.round(Math.random()*(maxTimeDelay-minTimeDelay) + minTimeDelay);
            }
            //set timer
            timerSTAT = new Timer(newTimeDelay, 1);
            timerSTAT.addEventListener(TimerEvent.TIMER, timerActionSTAT);
            timerSTAT.start();
        }
        //
        function timerActionSTAT(e:TimerEvent):void{
            //if not touched go to random frame en play then start over again. go to function
            if(currentFrame < 110){
                gotoAndPlay(framePlacesSTAT[Math.round(Math.random()*(differentImages-1))]);
            }
            stopstartSTAT();

        }
        //////////////////////TOUCH functions//////////////////////
        function touchFunc(event:MouseEvent):void
        {
            stopstartTOU();
            mySound.play();
        }
        //timer function
        function stopstartTOU():void{
            //play frame number from array
            if(countArrayTOU == 0){
                gotoAndStop(110);
                countArrayTOU++;
            }
            else{
                gotoAndStop(0);
                countArrayTOU = 0;
            }
        }
        /* /////////////////////////////////////////////////////////
        KILL ME
        //////////////////////////////////////////////////////////*/
        function killMe(e:Event):void {
            removeEventListener(Event.REMOVED_FROM_STAGE, killMe);
            removeEventListener(MouseEvent.MOUSE_DOWN, touchFunc);
            if(timerSTAT){
                timerSTAT.stop();
                timerSTAT.removeEventListener(TimerEvent.TIMER, timerActionSTAT);
                timerSTAT = null;
            }
        }
    }
}