SimpleAudioEngine Cocos2d Утечка памяти - PullRequest
3 голосов
/ 08 марта 2011

Я использую Instruments, и это указывает на утечку памяти в SimpleAudioEngine. Скриншот прилагается. Утечка памяти происходит несколько раз, хотя на скриншоте показан только один экземпляр. enter image description here

Кроме того, иногда это указывает на следующую реализацию (мой код):

-(void) preloadGameSounds
{
    // pre load the background sound 

    [[SimpleAudioEngine sharedEngine] preloadEffect:@"farm_background_sound.mp3"];

    // pre load the game sounds 

    [[SimpleAudioEngine sharedEngine] preloadEffect:@"chickenlayingegg.mp3"];

    // setup ding sound 
    [[SimpleAudioEngine sharedEngine] preloadEffect:@"ding.caf"];

    // egg pop sound 
    [[SimpleAudioEngine sharedEngine] preloadEffect:@"baloonpop.wav"];

    // preload applause sound 
    [[SimpleAudioEngine sharedEngine] preloadEffect:@"applause.mp3"];

    // wrong answer sound 
    [[SimpleAudioEngine sharedEngine] preloadEffect:@"wrong_answer_sound.wav"];

}

При смене сцен я также выгружаю звук, используя следующую реализацию:

-(void) unloadSoundEffects 
{

    [[SimpleAudioEngine sharedEngine] unloadEffect:@"applause.mp3"];
    //[[SimpleAudioEngine sharedEngine] unloadEffect:@"wrong_answer_sound.wav"];
    [[SimpleAudioEngine sharedEngine] unloadEffect:@"ding.caf"];

    [[SimpleAudioEngine sharedEngine] unloadEffect:@"chickenlayingegg.mp3"];
}

Эта утечка памяти заставляет FPS игры снижаться и делает игру все медленнее и медленнее!

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Из cocosdenshion FAQ :

Что я должен сохранить / освободить?

SimpleAudioEngine, CDAudioManager и CDSoundEngine API - все этодоступ через общий экземпляр синглтона.Это общий шаблон, который используется в Cocoa Touch и cocos2d.Общий экземпляр не должен быть сохранен или освобожден.

Если вам необходимо полностью завершить CocosDenshion и освободить все используемые им ресурсы, тогда вызовите метод end на API самого высокого уровня, который вы используете. Например, если вы используете SimpleAudioEngine, просто вызовите [SimpleAudioEngine end] .

Если вы используете объекты CDSoundSource, вы должны получить их с помощью одного из заводских методов, таких какsoundSourceForFile.Возвращаемый CDSoundSource автоматически освобождается, это означает, что если вы хотите использовать его вне области текущего метода, вы должны сохранить его.Если вы сохраняете CDSoundSource, вы должны освободить его, когда закончите его использовать.

0 голосов
/ 09 марта 2011

Вы используете симулятор для запуска средств утечки? Я сталкиваюсь с той же утечкой в ​​симуляторе, но не на устройстве. попробуйте использовать устройство для запуска средств утечки

...